Spring AOP 中提供了两种PointcutAdvisor,分别是:
①org.springframework.aop.support.RegexpMethodPointcutAdvisor (需要加上完整类名,可以用Spring提供的匹配方式)
②org.springframework.aop.support.NameMatchMethodPointcutAdvisor(只需要方法名,不用加类名)
下面看看使用第一种方式实现AOP的例子:
1.配置文件:
<bean id="interceptorAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<!-- 业务实现方法名匹配 -->
<property name="patterns">
<list>
<value>com.a.dispatch</value>
<value>com.b.service</value>
<value>com.apache.xxx.dal.*DAO.*</value>
</list>
</property>
<property name="advice">
<ref bean="interceptorAdvice" />
</property>
</bean>
2.配置自己实现的advice:
<bean id="interceptorAdvice"
class="com.yourImpl">
<property name="threshold">
<map>
<entry key="keyxxx" value="valuexxx"/>
</map>
</property>
</bean>
3.实现MethodInterceptor的invoke方法,真正执行的方法前后做相关工作,比如日志记录,数据监控等4.添加
DefaultAdvisorAutoProxyCreator的配置:DefaultAdvisorAutoProxyCreator这个类功能更为强大,这个类的奇妙之处是他实现了BeanProcessor接口,当ApplicationContext读如所有的Bean配置信息后,这个类将扫描上下文,寻找所有的Advistor(一个Advisor是一个切入点和一个通知的组成),将这些Advisor应用到所有符合切入点的Bean中。
<bean id="autoProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
<property name="proxyTargetClass" value="true"/>
</bean>
附上spring ioc和aop精髓图: