AOP

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

未完待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容