Spring 外围之 AOP
AOP 是什么?
AOP(Aspect Oriented Programming)是一种设计思维,是软件设计畛域中的面向切面编程,它是面向对象(OOP)的一种补充和欠缺。它以通过预编译形式和运行期动静代理形式,实现在不批改源码的状况下给程序动静对立增加额定性能的一种技术。
如图所示:
AOP 和 OOP 字面意思很相近,但其实两者齐全是面向不同的畛域的设计思维,理论我的项目中咱们通常将面向对象了解为一个动态过程(例如一个零碎有多少个模块,一个模块有哪些对象,对象有哪些属性)。面向切面的运行期代理形式,了解为一个动静过程,能够在对象运行时动静织入一些扩大性能或管制对象执行。
Spring AOP 利用原理
Spring AOP 底层基于代理机制(动静代理)实现性能扩大 :
1)JDK 动静代理: 如果指标对象(被代理对象)实现接口,则 AOP 底层能够采纳 JDK 动静代理机制为指标对象创立代理对象(指标对象和代理对象会实现独特接口)。
2)CGLIB 动静代理:如果指标对象(被代理对象)没有实现接口,则 AOP 底层会采纳 CGLIB 代理机制为指标对象创立代理对象(默认创立的代理类会继承指标对象类型)。
如图所示:
Spring AOP 相干术语:
- 切面(aspect):横切面对象,个别为一个具体类对象(能够借助 @Aspect 申明)。
- 告诉 / 加强(Advice):在切面的某个特定连接点上执行的动作(扩大性能),例如:around,before,after 等。
- 连接点(joinpoint):程序执行过程中某个特定的点,个别指向被拦挡到的指标办法。
- 切入点(pointcut):对多个连接点(Joinpoint)一种定义,个别能够了解为多个连接点的汇合。
- 引入(Introduction): 增加办法或字段到被告诉的类。Spring 容许引入新的接口到任何被告诉的对象。例如,你能够应用一个引入使任何对象实现 IsModified 接口,来简化缓存。Spring 中要应用 Introduction, 可有通过 DelegatingIntroductionInterceptor 来实现告诉,通过 DefaultIntroductionAdvisor 来配置 Advice 和代理类要实现的接。
- 指标对象(Target Object): 蕴含连接点的对象。也被称作被告诉或被代理对象。POJO
- 织入(Weaving): 组装方面来创立一个被告诉对象。这能够在编译时实现(例如应用 AspectJ 编译器),也能够在运行时实现。Spring 和其余纯 Java AOP 框架一样,在运行时实现织入。
- 待更新。。。。。