用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的属性值使用的是正则表达式

相关文章
相关标签/搜索