AOP概念的简单理解
??? ?? 看了这么多参考书,我认为还是良GG的解释比较精到,这可能也是人家是培训师的缘故。
??? ?? AOP和OOP有比较大的不通。OOP集中于对象的建模和行为的封装,而AOP考虑的是在流程上如何建模一个比较单独的功能。用OOP来构建一个核心系统是非常好的,但是,如果需要很多其他相关功能,这个时候AOP就有其用武之处了。
??? ?? AOP关注的Cross-cutting concerns, 从这些关注面中,我们抽取出一些可识别的Aspects,然后我们把这些Aspects具体设计为Advices,这些Advices根据我们的要求PointCut,将这些Advices具体Weave到应用的这些可以插入的JointPoint中去。
??? ??
??? ?? 这样子就非常好理解了。对应到Spring当中:
Aspects 的 具体设计 Advices,它对应到Spring当中,就是那些具体执行操作的类。比如说BeforeAdivce之类的这些表示Aspect的类。
PointCut就是一堆配置信息,它描述了有那些Advices使用到那些JointPoint当中去。它对应到Spring当中,就是对应的ProxyFactoryBean当中的配置信息。Weave就是ProxyFactoryBean,从名字上也知道它是一个代理工厂,生成原方法的代理对象,然后将Aspect定义的这些功能动态增加到对象中去。
JointPoint:其实就是插入点,一般对象在执行方法的时候可以被插入其他的功能。在Spring中,只支持在Method层次上进行插入,而不支持在Field层次上进行插入,因为这样的话实际上已经对对象的状态产生影响了,它连原来的对象都不是了,不适合用来构建应用系统。
??? ?? 其实静态代理和动态代理的了解对Spring AOP的理解真的是有非常大的帮助,因为Spring AOP就是靠动态代理技术以及动态字节码生成技术来达到目标的:通过构建对象的代理对象来完成功能的插入。
??? ?? 现在真的很佩服Spring。上次对Spring JDBC的分析,发现Spring对JDBC的理解绝对是非常准确到位,给开发人员提供了非常好的封装,尽量简化了对JDBC的编码。而Spring AOP,应用代理技术到事务管理上,完全可以让开发人员以声明式事务管理的方式将事务管理添加到应用中,简化了对事务的处理。
??? ?? Rod Johnson确实厉害啊。我觉得很有必要重新读一下Expert one on one 13 楼 galaxystar 2007-07-14 我认为, 其实guide最主要的还是隔离了配置文件,这是一大优势, 大型项目使用guide好处是,所有的DI都是以最亲切的类形式展示的。比较xml与java类来说,前者灵活性就低了很多。 14 楼 hiwzg 2007-07-20 前天听了一位新来的同事讲FrameServer,自主实现的IOC容器。也实现了大部分AOP功能,但其解决的问题居然是为了对付多种不同终端的显示问题。而要处理这个问题根本不用绕这么大圈子,做这些东西无非就是为了纯粹学习的目的。看着轮子一次次的被重造,而没有突破,觉得是对生命的浪费。