PointcutAdvisor 是顧問的一種,可以指定具體的切入點。顧問將通知進行了包裝,會根據不
同的通知類型,在不同的時間點,將切面織入到不同的切入點。
PointcutAdvisor 接口有兩個較爲常用的實現類:
NameMatchMethodPointcutAdvisor 名稱匹配方法切入點顧問 匹配對象是簡單方法名
RegexpMethodPointcutAdvisor 正則表達式匹配方法切入點顧問 匹配對象是全限定性方法名
名稱匹配方法切入點顧問
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 註冊目標對象 -->
<bean id="someService" class="com.gqc.aop09.SomeServiceImpl"/>
<!-- 註冊切面:後置通知 -->
<bean id="myAdvice" class="com.gqc.aop09.MyAfterReturningAdvice"/>
<!-- 註冊切面:顧問 -->
<bean id="myAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice" ref="myAdvice"/>
<!-- 指定切入點:這裏匹配的對象是簡單方法名 -->
<property name="mappedNames" value="*ir*"/> <!-- 也可以value="first,second" -->
</bean>
<!-- 生成代理對象 -->
<bean id="serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 指定目標對象 -->
<property name="target" ref="someService"/>
<!-- <property name="targetName" value="someService"/> -->
<!-- 指定切面 -->
<property name="interceptorNames" value="myAdvisor"/>
</bean>
</beans>
正則表達式匹配方法切入點顧問<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 註冊目標對象 -->
<bean id="someService" class="com.gqc.aop10.SomeServiceImpl"/>
<!-- 註冊切面:後置通知 -->
<bean id="myAdvice" class="com.gqc.aop10.MyAfterReturningAdvice"/>
<!-- 註冊切面:顧問 -->
<bean id="myAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="myAdvice"/>
<!-- 這裏的正則表達式匹配的對象是全限定性方法名 (帶包名的方法名)-->
<property name="pattern" value=".*doFirst"/>
<!-- <property name="patterns" value=".*doFirst,.*doSecond"/> -->
<property name="pattern" value=".*doFirst|.*doSecond"/>
</bean>
<!-- 生成代理對象 -->
<bean id="serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 指定目標對象 -->
<property name="target" ref="someService"/>
<!-- <property name="targetName" value="someService"/> -->
<!-- 指定切面 -->
<property name="interceptorNames" value="myAdvisor"/>
</bean>
</beans>