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>



猜你喜欢

转载自blog.csdn.net/Aseveng/article/details/79103338
今日推荐