1. AOP概念:
Aspect Oriented Programming,面向切面编程。是OOP(Object Oriented Programmign)面向切面编程的补充,OOP中是纵向关系,导致代码大量重复,不利于模块重用。
如日志功能,安全性,异常处理和 透明的持续性,往往横向的分布在所有对象层次中,且这种代码和对象的核心功能无关,这种代码被称为“横切”。
AOP技术利用可以“横切”的技术,抛开对象内部,并将影响了多个类的公共行为封装到一个可重用模块,命名为“Aspect”,即切面。便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来可操作性和可维护性。
AOP的作用在于把系统中的横切关注点从核心关注点分离出来。
1.1 横切关注点:
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
1.2 切面(aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象
1.3 连接点(joinpoint)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
1.4 切入点(pointcut)
对连接点进行拦截的定义
1.5 通知(advice)
所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
1.6 目标对象
代理的目标对象
1.7 织入(weave)
将切面应用到目标对象并导致代理对象创建的过程
1.8 引入(introduction)
在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
2. Spring对AOP对支持
Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。
2.1 Spring创建代理的规则为:
-
默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了
-
当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB
2.2 程序员只需要参与三个部分:
-
定义普通业务组件
-
定义切入点,一个切入点可能横切多个业务组件
-
定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作
3. jar包
Gradle: org.springframework:spring-aop:5.0.5.RELEASE
下面包含两个文件夹: aopalliance 和 springframework.aop
未完待续...
网友评论