最近研究EhCache,在网上找到了一篇文章(http://blog.sina.com.cn/s/blog_46d5caa40100ka9z.html
)。里面介绍了有选择性的配置要缓存的方法,于是看到了MethodInterceptor,对此很有兴趣,就研究了下,做个日志。
本例是在本人现在的Spring的项目上做的测试。要实现的效果就是在目标类执行之前执行自己定义的方法。
在下面开始之前首先要已经有已经实现了某个接口的具体的业务Bean(我的是实现了
IMsgService接口的消息bean---
iMsgService1
)。
1.首先在beans.xml文件中添加一个实现了MethodBeforeAdvice接口的类。
beans.xml:
<bean id="personBeforeAdvice" class="yssoft.test.PersonBeforeAdvice"/>
PersonBeforeAdvice类:
PersonBeforeAdvice类:
public class PersonBeforeAdvice implements MethodBeforeAdvice{
public void before(Method method,Object[]args,Object target) throws Throwable{
System.out.println("BeforeAdvice:方法调用前"); }
}
public void before(Method method,Object[]args,Object target) throws Throwable{
System.out.println("BeforeAdvice:方法调用前"); }
}
2.在beans.xml文件中添加生成iMsgService1的代理类
<bean id="iMsgService" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces" value="yssoft.services.IMsgService"/>
<property name="target" ref="iMsgService1"/>
<property name="interceptorNames">
<list>
<value>personBeforeAdvice</value>
</list>
</property>
</bean>
<property name="proxyInterfaces" value="yssoft.services.IMsgService"/>
<property name="target" ref="iMsgService1"/>
<property name="interceptorNames">
<list>
<value>personBeforeAdvice</value>
</list>
</property>
</bean>
----------------------------------------------------------------------------------------------------
proxyInterfaces:value是接口
target:目标类(业务bean)
interceptorNames:业务切面的类
这样在iMsgService1业务bean的任何方法调用之前都会执行PersonBeforeAdvice类的Before方法