系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这 些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心 业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。
当我们需要为分散的对象引入公共行为的时候,
OOP
则显得无能为力。也就是说,
OOP
允许你定义从 上到下的关系,但并不适合定义从左到右的关系。例如日志功能。
日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。
在
OOP
设计中,它导致了大量代码的重复,而不利于各个模块的重用。
AOP
:将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象 (具体业务逻辑)中去。AOP
可以对某个对象或某些对象的功能进行增强,比如对象中的方法进行增
强,可以在执行某个方法之前额外的做一些事情,在某个方法执行之后额外的做一些事情