用ProxyFactoryBean创建AOP代理

  Spring的Advisor是Pointcut和Advice的配置器,它是将Advice注入程序中Pointcut位置的代码。org.springframework.aop.support.DefaultPointcutAdvisor是最通用的Advisor类。在Spring中,主要通过XML的方式来配置Pointcut和Advice。

  使用Spring提供的类org.springframework.aop.framework.ProxyFactoryBean是创建AOP的最基本的方式。

 

一、使用ProxyFactoryBean代理目标类的所有方法

  在Spring中,ProxyFactoryBean是在XML中进行配置的。示例代码如下:

 1 <?xml version = "1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 3 "http://www.springframwork.org/dtd/spring-beans.dtd">
 4 <beans>
 5     <bean id="log"  class = "com.gc.action.LogAround"/>
 6   <bean id="timeBook" class = "com.gc.action.TimeBook"/>
 7   <!--设定代理类-->
    <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> 8   <!--这里代理的是接口--> 9    <property name="proxyInterfaces"> 10 <value>com.gc.impl.TimeBookInterface</value> 11 </property> 12 <!--程序中的Advice--> 13 <property name="target"> 14 <ref bean="timeBook"/> 15 </property> 16   <!--是ProxyFactoryBean要代理的目标类--> 17   <property name="interceptorNames"> 18     <list> 19       <value>log</value> 20     </list> 21   </property> 22 </bean> 23 </beans>

id为logProxy的Bean,就是ProxyFactoryBean

ProxyFactoryBean的proxyInterfaces属性:要代理的接口

ProxyFactoryBean的target属性:要代理的目标类,这个目标类实现了上面的接口

ProxyFactoryBean的interceptorNames属性:在代理的目标类中插入的Advice

ProxyFactoryBean的proxyTargetClass属性:true说明ProxyFactoryBean要代理的不是接口类,而是CGLIB方式来进行代理

使用ProxyFactoryBean代理目标类的指定方法

  使用org.springframework.aop.support.RegexpMethodPointcutAdvisor类,示例代码如下:

 1 <?xml version="1.0" encoding="UTF-8">
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 3 <beans>
 4     <bean id="log" class="com.gc.action.LogAround"/>
 5     <bean id="timeBook" class="com.gc.action.TimeBook"/>
 6     <bean id="logAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
 7         <property name="advice">
 8             <ref bean="log"/>
 9         </property>
10         <!--指定要代理的方法-->
11         <property name="patterns">
12             <value>.*doAuditing.*</value>
13         </property>
14      </bean>
15      <!--设定代理类-->
16      <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
17         <property name="proxyInterfaces">
18              <value>com.gc.impl.TimeBookInterface</value>
19         </property>
20         <property name="target">
21             <ref name="timeBook"/>
22        </property> 
23        <property name="interceptorNames"> 
24              <list>
25                   <value>logAdvisor</value>
26             </list>
27        </property>
28      </bean>     
29 </beans>

id为logAdvisor的Bean中设定Advice和要指定的方法。

logAdivsor的advice属性指定Advice

logAdvisor的patterns属性指定要代理的方法,patterns的属性值使用的是正则表达式

 

posted @ 2016-08-04 17:30  随心随己  阅读(4338)  评论(0编辑  收藏  举报