顿搜
Spring AOP 面向切面编程
AOP专门用于系统中处理各个模块当中,分布于各个不同的方法当中交叉关注点的问题。
AOP将应用系统分为两个部分:核心业务逻辑和横向的通用逻辑(所谓的“方面”),例如持久化管理、事务管理、安全管理、日志管理以及调试管理,在Spring当中提供了面向切面编程丰富的支持,允许分离业务的应用逻辑与系统级的服务,进行内聚性的开发,应用对象只实现它们的业务逻辑而不必关心其它。
一、AOP和OOP的关系
AOP是对OOP面向对象便编程的一种有益的补充和延续。
OOP是从静态角度考虑程序结构,AOP是从动态角度考虑程序运行过程,是对业务处理过程中的切面进行提取,所面对的是处理过程中的某个步骤或者阶段,研究的是动态的领域。
二、主要功能
用于系统级别的功能,例如日志记录、性能统计、安全控制、事务处理、异常处理等功能,将这些从业务逻辑中划分出来,通过对这些行为的分离,将其独立到非业务性逻辑方法中,从而在改变这些行为的时候不影响业务代码的处理,即将常用的服务模块化,并且用声明的方式将这些组件应用到其它的组件当中去。从而每一个业务逻辑组件只需要关心自己的业务逻辑,而不必了解一些常用的服务组件,从而保证了更高的内聚性。使用AOP,可以是用切面的方法注入程序,通常主程序的目的不在于处理这些切面的功能,所以AOP可以有效的防止代码混乱。
AOP专门用于处理系统中分布于各个模块中的交叉关注点的问题,在J2EE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案
三、AOP代理
AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用。AOP代理在特定切入点添加了增强处理,并回调了目标对象的方法。代理对象的方法=增强处理+被代理对象的方法。
需要程序员参与的只有三个部分:
1、定义普通业务组件
2、定义切入点,一个切入点可能会横切多个业务组件
3、定义增强处理,就是在AOP框架为普通业务组件植入的处理动作
四、几个关键概念
- 1、切面(Aspect)
一个关注点的模块化,这个关注点可能会横切多个对象。切面可以使用基于模式的和基于切面的注解方式来进行实现。
- 2、连接点(Join Point)
在程序执行中某个特定的点。一个连接点总是表示一个方法的执行,简单点说,就是加入“切入”的那个点。
- 3、通知(Advice)
在切面的摸个特定连接点上执行的动作。包括around,before,after等不同类型的通知。许多AOP的框架都是用拦截器作为通用模型。并且维护一个以连接点为中心的拦截器链。
- 4、切入点(Point Cut)
是匹配连接点的,通知和一个切入点表达式并联,并在满足这个切入点的连接点上运行。切入点表达式如何和连接点匹配是AOP的核心
- 5、引入(Introduction)
给一个类型声明额外的方法和属性,Spring允许应用新的接口到任何被代理的对象
- 6、目标对象(Target Object)
被一个或者多个切面所通知的对象,也被称作被通知对象,是一个被代理对象
- 7、AOP代理(AOP Proxy)
AOP代理就是AOP框架所创建的对象,它用来实现切面契约。在Spring当中,AOP代理可以是JDK动态代理或者Cglib代理
- 8、织入(Weaving)
把切面连接到其他应用程序类型或者对象之上,并创建一个被通知的对象,可以在编译、类加载或者运行的时候来完成。Spring采用在运行的时候来织入。