浅谈Spring AOP

Spring核心之AOP
AOP是什么? AOP(Aspect Oriented Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象(OOP)的一种补充和完善。它以通过预编译方式和运行期动态代理方式,实现在不修改源码的情况下给程序动态统一添加额外功能的一种技术。
如图所示:
浅谈Spring AOP
文章图片

AOP和OOP字面意思很相近,但其实两者完全是面向不同的领域的设计思想,实际项目中我们通常将面向对象理解为一个静态过程(例如一个系统有多少个模块,一个模块有哪些对象,对象有哪些属性)。面向切面的运行期代理方式,理解为一个动态过程,可以在对象运行时动态织入一些扩展功能或控制对象执行。
Spring AOP 应用原理 【浅谈Spring AOP】Spring AOP底层基于代理机制(动态代理)实现功能扩展:
1)JDK动态代理:假如目标对象(被代理对象)实现接口,则AOP底层可以采用JDK动态代理机制为目标对象创建代理对象(目标对象和代理对象会实现共同接口)。
2)CGLIB动态代理:假如目标对象(被代理对象)没有实现接口,则AOP底层会采用CGLIB代理机制为目标对象创建代理对象(默认创建的代理类会继承目标对象类型)。
如图所示:
浅谈Spring AOP
文章图片

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框架一样,在运行时完成织入。
  • 待更新。。。。。

    推荐阅读