上篇的例子,自动装配和自动检测Bean是使用注解的方式处理的,而面向切面编程是使用aop标签处理的,给我感觉就像中西医参合一样。
现在就来优化优化,全部使用注解的方式处理。
1、工程图:
2、Protecter的修改如下,Protecter声明了切点和通知,因此不需要在xml中配置切点和通知了。
2、Stolen 接口,未做任何修改:
3、Monkey实现Stolen接口,未做修改:
4、现在需要让Spring将Protecter应用成为一个切面。这个需要在Spring上下文中声明一个自动代理Bean。Spring中有个自动代理创建类:AnnotationAwareAspectJAutoProxyCreator.
这个类会代理一些Bean,这些Bean的方法需要与@AspectJ注解的Bean中所定义的切点相匹配。
在本例中,则表示:
AnnotationAwareAspectJAutoProxyCreator这个自动代理Bean,会找到使用@AspectJ注解的Bean。Protecter类使用了注解
因此,Protecter类满足了使用@AspectJ注解的Bean这个要求,@AspectJ注解的Bean中所定义的切点相匹配,这表示会找到Protecter类中定义的切点:
与这个切点相匹配的则是com.test.demo.stolen.Stolen.stolens(name,peace) 这个方法了。
所以,本例中AnnotationAwareAspectJAutoProxyCreator类会自动代理实现了接口Stolen的Bean.即Monkey类。
Spring为了简化声明,Spring在aop命名空间中更为简洁的声明方式为:
<aop:aspectj-autoproxy />
beans.xml:
测试类及运行结果:
利用例子来理解spring的面向切面编程(使用@Aspect),布布扣,bubuko.com
利用例子来理解spring的面向切面编程(使用@Aspect)
原文:http://www.cnblogs.com/wmmang-blog/p/3642283.html