版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AustinBoris/article/details/56285258
17、spring AOP通知——Pointcut、Advisor
说明:在上一个例子spring AOP通知——Advice中,主要介绍了Advice的四种用法,但是被拦截的bean的所有方法都会被影响,实际上,我们通常只需要拦截一个或者若干个方法即可,而不是所有。
这里我们依然使用上一个例子的demo,但是需要做一些更改。
主要有以下三步即可实现:
第一步:设置目标被拦截的方法名,并且封装称为一个bean
在bean.xml配置文件中添加如下代码:
<!-- 设置切入点 printName -->
<bean id="helloWorldPointcut" class="org.springframework.aop.support.NameMatchMethodPointcut">
<property name="mappedName" value="printName" />
</bean>
说明:该bean的property属性里的value,即是需要被拦截的方法名
第二步:声明切入点和代理的关系的bean
在bean.xml配置文件中添加如下代码:
<!-- 声明切入点和代理的关系的bean -->
<bean id="helloWorldAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut" ref="helloWorldPointcut" />
<property name="advice" ref="adviceAroundService" />
</bean>
第三步:更改代理 bean
<!-- 设置代理关系的bean -->
<bean id="adviceServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 被拦截的bean -->
<property name="target" ref="helloWorld"/>
<!-- 代理bean -->
<property name="interceptorNames">
<list>
<value>helloWorldAdvisor</value>
</list>
</property>
</bean>
运行结果:
使用关键字拦截(正则表达式)
说明:在spring mvc项目中经常出现,例如拦截DAO,Service等等
就像下面这样:更改bean配置文件的
<!-- 声明切入点和代理的关系的bean -->
<bean id="helloWorldAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="patterns">
<list>
<value>.*URL.*</value>
</list>
</property>
<property name="advice" ref="adviceAroundService" />
</bean>