AOP (Aspect Oriented Programming),国内大致翻译为“面向切面编程”。
AOP 是一个概念,一个规范,本身并没有设定具体语言的实现。
可以通过预编译方式和运行期动态代理实现在不修改源码的基础上给程序动态统一添加功能的一种技术。aop实际上是GOF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性,AOP可以说是这个目标的一种实现。
Spring 中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系通级服务(例如审计auditing 和 事务 transaction 管理)进行内聚性的开发。应用对象只实现它们应该做的---完成业务逻辑,仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
主要功能
日志记录,性能统计,安全控制,事务处理,异常处理等等。
主要意图
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。简单来说,就是实现行为的共享。一旦发生变化,不用修改所有代码,只需修改部分代码就行。
面向对象和面向切面
面向切面编程和面向对象编程并不是竞争关系,而是良好的互补关系。面向对象主要用于对同一对象层次的公共行为建模。它的弱点是将公共行为应用于多个无关对象模型之间。而这恰好是面向切面适合的地方。有了AOP,我们可以定义交叉的关系,而这些关系可以应用于跨模块的,彼此不相关的对象模型。AOP可以让我们可以层次化功能,而不是嵌入功能,从而使代码有更好的可读性和可维护性。