用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的最基本的方式。spring

 

1、使用ProxyFactoryBean代理目標類的全部方法spa

  在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,就是ProxyFactoryBeancode

ProxyFactoryBean的proxyInterfaces屬性:要代理的接口xml

ProxyFactoryBean的target屬性:要代理的目標類,這個目標類實現了上面的接口blog

ProxyFactoryBean的interceptorNames屬性:在代理的目標類中插入的Advice接口

ProxyFactoryBean的proxyTargetClass屬性:true說明ProxyFactoryBean要代理的不是接口類,而是CGLIB方式來進行代理get

使用ProxyFactoryBean代理目標類的指定方法it

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

相關文章
相關標籤/搜索