AOP概念
面向切面编程可以说是面向对象编程的补充和完善。OOP引入封装、继承、多态的概念来建立一种层次结构,但是OOP并不适合定义横向的关系。例如日志功能,日志往往是横向地散布在所有对象中,且与对象的核心功能毫无关系。这种散布在各处的无关代码被称为横切,在OOP设计中,它导致了大量代码的重复,复用性低。
AOP编程就是一种横切的思想,将影响多个类的公共行为封装到一个可重用的模块,并将其命名为”Aspect”。简单来说就是讲那些与业务无关,却为业务模块所共同调用的逻辑封装起来,便于减少系统代码重复,减低模块之间的耦合度,并有利于未来的可操作性和可维护性。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
- 横切关注点:对于哪些方法进行拦截,拦截后怎么处理?
- 切面(Aspect):类是对物体特征的抽象,切面是对横切关注点的抽象
- 连接点(Joinpoint):被拦截的方法
- 切入点(Pointcut)
- 通知(Advice):连接点后要执行的代码
- 目标对象:代理的目标对象
- 引入:在不修改代码的前提下,动态地添加业务逻辑
Spring对AOP的支持
Spring中的aop代理是由IOC容器负责管理的。
- 默认使用Java动态代理来创建aop代理
- 当需要代理类而不是接口时,spring会使用Cglib代理
为实现aop编程,我们只需要做三个部分:
- 定义普通业务组件
- 定义一个切入点,一个切入点可能横切多个业务组件
- 定义扩展逻辑,就是为普通业务组件动态引入的动作
本文作者:
肖鹏
本文链接: http://www.xiaopeng.pro/articles/97375e6e.html
版权声明: 本原创文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: http://www.xiaopeng.pro/articles/97375e6e.html
版权声明: 本原创文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!