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