AOP的概念是Aspected Oriented Programming 面向方面编程。
好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题,如:事务、安全、日志等横切关注
实现AOP有几种方式:
1. Spring 1.2版本中通过ProxyFactoryBean来实现aop,即通过动态***来实现的,Aspect必须继承MethodBeforeAdvice,MethodAfterAdvice等
2. Spring 2.0 AOP需要改的是FBI 这个类,而且它也不需要再实现某些接口
3. 三使用标注(@AspectJ)实现AOP
AOP的概念是Aspected Oriented Programming 面向方面编程。
好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题,如:事务、安全、日志等横切关注
实现AOP有几种方式:
1. Spring 1.2版本中通过ProxyFactoryBean来实现aop,即通过动态***来实现的,Aspect必须继承MethodBeforeAdvice,MethodAfterAdvice等
2. Spring 2.0 AOP需要改的是FBI 这个类,而且它也不需要再实现某些接口
AOP 和 OOP的区别:
AOP将散落在系统中的“方面”代码集中实现;AOP有助于提高系统可维护性;AOP是一种设计模式,Spring提供了一种实现;
AOP不能替代OOP,OOP是obejct abstraction,而AOP是concern abstraction,前者主要是对对象的抽象,诸如抽象出某类业务对象的公用接口、报表业务对象的逻辑封装,更注重于某些共同对象共有行为的抽象,如报表模块中专门需要报表业务逻辑的封装,其他模块中需要其他的逻辑抽象 ,而AOP则是对分散在各个模块中的共同行为的抽象,即关注点抽象。一些系统级的问题或者思考起来总与业务无关又多处存在的功能,可使用AOP,如异常信息处理机制统一将自定义的异常信息写入响应流进而到前台展示、行为日志记录用户操作过的方法等,这些东西用OOP来做,就是一个良好的接口、各处调用,但有时候会发现太多模块调用的逻辑大都一致、并且与核心业务无大关系,可以独立开来,让处理核心业务的人专注于核心业务的处理,关注分离了,自然代码更独立、更易调试分析、更具好维护。
核心业务还是要OOP来发挥作用,与AOP的侧重点不一样,前者有种纵向抽象的感觉,后者则是横向抽象的感觉, AOP只是OOP的补充,无替代关系。