AOP 是面向切面编程,相对于OOP(面向对象编程),Spring 的AOP 是AOP 思想的一种实现
AOP 可以说是OOP 的补充和完善
OOP 引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP 则显得无能为力
在OOP 中只能通过继承类和实现接口来让一组类共享相同的行为,使代码的耦合度增强, 且类继承只能为单继承, 阻碍更多行为添加到一组类上
AOP 的存在目的是为了解耦,让一组类共享相同的行为
AOP 利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为 “Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性
如果说“对象”是一个个空心的圆柱体,面向切面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后在这些切面上进行相同的行为比如权限认证、日志、事务处理,最后它又以巧夺天功的妙手 将这些剖开的切面复原,不留痕迹,最终达到了封装共性行为,降低系统耦合度的目的。