用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的屬性值使用的是正則表達式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM