SpringFramework中的AOP简单使用(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:51 点击:次
<bean id="fooTarget" class="FooImpl"/>
<bean id="myAdvice" class="PrintBeforeAdvice"/>
<bean id="foo" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>FooInterface</value>
</property>
<property name="target">
<ref local="fooTarget"/>
</property>
<property name="interceptorNames">
<list>
<value>myAdvice</value>
</list>
</property>
</bean>
</beans>
当然,main中的代码也要进行相应的修改:
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
FooInterface foo = (FooInterface)context.getBean("foo");
foo.printFoo();
foo.dummyFoo();
}
现在运行一下,结果将和上面的运行结果完全一样,这样是不是更优雅?当需要更改实现时,只需要修改配置文件就可以了,程序中的代码不需任何改动。
但是,这时候会发现被proxy的object中的所有方法调用时都将运行advice中的before,这显然不能满足绝大多数情况下的需要,此时,只 需借用Advisor就可以了,当然要在Advisor中利用pattern设置好哪些方法需要advice,更改applicationContext 如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<description>The springeva application context</description>
<bean id="fooTarget" class="FooImpl"/>
<bean id="printBeforeAdvice" class="PrintBeforeAdvice"/>
<bean id="myAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="printBeforeAdvice"/>
</property>
<property name="pattern">
<value>.*print.*</value>
</property>
</bean>
<bean id="foo" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
相关新闻>>
- 发表评论
-
- 最新评论 更多>>