说明:在上一个例子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>新闻热点
疑难解答