顾问是spring提供的另一种切面,其可以完成更为负载的切面织入功能。
pointAdvisor是顾问的一种,可以指定具体的切入点。顾问将通知进行包装,会根据不同的通知类型,在不同的时间点,将切面织入不同的切入点。
pointAdvisor接口有两个常用的实现类:
1.名称匹配方法切入点顾问 NameMatchMethodPointcutAdvisor
2.正则表达式方法切入点顾问
列子1:
1.名称匹配方法切入点顾问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!– 注册目标对象 –> <bean id=“ISomeService” class=“com.bean.service5.someServiceImpl”></bean> <!– 注册切面:通知 –> <bean id=“myadvice” class=“com.bean.service5.mymethodBeforeAdvice”/> <!– 注册切面:顾问 –> <bean id=“myAdvisor” class=“org.springframework.aop.support.NameMatchMethodPointcutAdvisor”> <property name=“advice” ref=“myadvice”></property> <property name=“mappedNames” value=“*ir*===方法的名字”></property> </bean> <!– 生成代理对象 –> <bean id=“serviceProxy” class=“org.springframework.aop.framework.ProxyFactoryBean”> <!– 指定目标对象 –> <property name=“target” ref=“ISomeService”></property> <!– 指定切面–> <property name=“interceptorNames” value=“myAdvisor”></property> </bean>
|
2结果:可以随意的指定切面通知
例子2:
正则表达式方法切入点顾问
1 2 3 4 5
| <bean id=“myAdvisor” class=“org.springframework.aop.support.RegexpMethodPointcutAdvisor“> <property name=“advice” ref=“myadvice”></property> <!– 这里的正则表达式匹配的对象是全限定方法名 –> <property name=“pattern” value=“.*doFirst”></property> </bean>
|