对Spring的AOP体系的一些个人想法
(1)首先spring 的aop体系兼容了spring 的javabeans的配置和IOC的配置体系形成了比较风格统一,正因为spring作者Rod Johnson是aopalliance定制人之一,理所当然的spring也支持和遵守aopalliance的规范。从他的内核看来并不复杂就是通过Cglib和JDK动态代理这两种方式实现的,默认是Cglib的方式.
(2)Spring的AOP体系实现的重扩展和开放的角度看是比较完美的,但是我个人觉得(不知道对不对的,大家就看看的心态好了,自己鉴别好了),使用的复杂性和AOP的开关原则又存在一些弊端(哈哈有点自大了,竟然攻击Johnson):AOP是从更广的抽象正交分离关注点,但是使用Spring的AOP体系方式并没有使织入者与被织入者的关系分离(因为你还是必须写一个的类实现MethodInterceptor,把两者的织入关系代码里写)这就必须让使用者的AOP观念很强才能正常使用,初学者很难去理解.
(3)我自己认为,可以简单的使用配置声明织入者,被织入者和织入点(织入方式:befor/after),和织入的方法函数和被织入的方法函数,那么后台就能通过一个工厂直接形成一个Advisor(完全扮演了一个横切观念,包括被织入的代码片断和织入点----代理顾问)再根据其完全可以实现一些AOP的操作,而不需要再手工去处理那么多逻辑。不可否认这样的开关决策必然会降低开放性和用户的参与和改造能力,但是还是有机会可以补偿的:可以开放一个核心的实现例如Cglib2AopProxy.java和JdkDynamicAopProxy给一些有志改造或需要的人员进行继承派生就行了。毕竟AOP的核心观念就是织入者,被织入者,织入点和织入的条件。织入的情况大多就是之前,之后,还有就是一段代码中(同时有之前之后).根本就可以创造一个AOP体系完成织入的用户定义的逻辑。
(4)说了一些个人觉得说缺点的地方,我也觉得有一些偏激了,我是多么的尊敬Rod Johnson的毕竟他是我们这些人的前辈同时很无私的提供很多优秀的观念给我们,是时候也要说一说Spring AOP中很好的地方,第一他把AOP的过程分的更细了(我并没有很详细的看的代码体系,只是从接口的编排和一些比较核心代码理解的),在每一个环节中很好的分离面出来。提供了很多优化服务:例如Cache,区分单实例,和非单实例实现;同时也提出支持配置过滤函数名的织入方法,也提供了不少虚类,给用户去改造(但是框架改造的难度比较大,还不如自己写了)
(5)我自己正着手写包含一个简单AOP体系的开源项目,如果大家有什么不同的看法或觉得我说的不对的地方请指出来,小弟十分的感谢.