spring AOP 是spring框架两大核心思想之一,aop即是面向切面编程,意在解决程序中系统级别的附加在类尤其是方法上的功能的问题,aop的核心是代理模式,实现aop在spring中四种方式,以下是spring自身实现、依赖aspectj实现,和基于aspecet的注解实现。
1.spring提供的aop实现方式:基于XML配置和实现接口的类联合应用:
<!--目标类bean注入--> <bean id="orderServiceBean" class="com.apesource.dao.Impl.OrderServiceImpl"/> <bean id="userServiceBean" class="com.apesource.dao.Impl.UserServiceImpl"/> <!--通知类bean--> <bean id="logAdviceBean" class="com.apesource.dao.advice.LogAdvice"/> <bean id="gexAdvice" class="com.apesource.dao.advice.GTXAdvice"/> <!--设置切入点--> <bean id="createMethodPointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"> <property name="pattern" value=".*User.*"/> </bean> <!--高级通知:切入点+通知--> <bean id="pointcutAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"> <property name="advice" ref="gexAdvice"/> <property name="pointcut" ref="createMethodPointcut"/> </bean> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*ServiceBean</value> </list> </property> <property name="interceptorNames"> <list> <value>logAdviceBean</value> <value>pointcutAdvisor</value> </list> </property> </bean>
// 拦截器 public class GTXAdvice implements MethodInterceptor { @Override public Object invoke(MethodInvocation methodInvocation) throws Throwable { System.out.println("方法名称:" + methodInvocation.getMethod()</