Spring2.0的aop果然很大改动。aop文档开篇就介绍@Aspect注解方式的配置,其实我觉得统一aop的配置方式,并且使得它更加易用才是这次改动的成功之处。
初看schema的配置方式就觉得Spring2.0应该是用AutoProxyCreator来实现的。经过调看src,发现果然如此;同时关注了下order的实现,期望新引入的aspect和原来的advisor能并行。
(理论应该如此,可实际上Spring2.0发布的时候aspect并没有实现order,然后我的myeclipse的xml编辑器好像用了最新的 aop schema,导致我写xml的时候是可以写order,我还暗喜,然后运行就出错了~~;然后去了Spring官网,看看是不是schema的问题;看了Spring2.0.7的changelog后发现这个特性才加上~~~bug!!!不管怎么说,现在是好了,所以切记,整数的release版本是很危险的)Spring2.0.7以后修复/添加了order属性,使得aspect和advisor都能很好的并存,对Spring来说都是 advisor/advice 拉 ^_^ 。
看了Spring2.0.7后发现aop那块的代码在Spring2.0到Spring2.0.7中大改了,有一个原来用来加载aop config的类都没有了(或者是改名了)~~。现在的aop实现基本上是这样:
AspectJAwareAdvisorAutoProxyCreator 作为启用的默认AutoProxyCreator(如果你使用了的话AutoProxyCreator会换成 AnnotationAwareAspectJAutoProxyCreator)不过其实只是添加了搜索bean中标记了@Aspect的实例作为可用的advisor而已;order的排序方式好像也有改动,现在的排序没有什么问题。
性能上,由于采用了单一的AspectJAwareAdvisorAutoProxyCreator ,作为唯一的advisor配置库,在其中进行advisor的排序,所以再多的切面也只需要实例化一个bean的对象,切面在一个层次上进行,看似没有以前那么臃肿拉 :)
Spring2.0的aop配置比较集中,很清晰,也很简单。
【编辑推荐】