AOP 通知

 顧問(Advisor)是 Spring 提供的另一種切面。其可以完成更爲複雜的切面織入功能。
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>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章