Spring Aop基础

Aop(Aspect Oriented Programming)是spring的第二大特点,于上一demo可知,spring对于统一处理某类功能,并且从结构上直接从业务代码中分离,可见Aop对于软件而言有着非常重要的意义。自己在项目中使用过的aop大致有:1、在生产环境已经跑了很长时间的成熟项目,在此基础上增加审计功能 2、多数据源的注解配置  3、日志信息。。。(后面会对其进行解析)

首先需要对术语进行解释,这一点很重要,介入一个例子:

Spring Aop基础

1、连接点(Joinpoint):业务代码执行前、执行后、执行异常时的位置。

2、切点(PointCut):切点可以理解为一系列连接点的集合。

3、增强(Advice):切点上织入的程序代码片段。所以增强也与连接点一样分为执行前、执行后、异常时的增强。

4、目标对象(Target):增强逻辑的目标类。

5、引介(Introduction):属于特殊增强,为类添加某些属性和方法。(让该类动态实现接口的并实现方法)

6、织入(weaving):织入是增强添加对连接点的过程。分为三种:

1)编译期织入,这要求使用特殊的java编译器。

2)类装载期织入,需要使用特殊的类加载器

3)动态代理织入,在运行期为目标类添加增强,生成子类的方式。

Spring采用动态代理的织入,而AepectJ使用预编译织入和类装载织入。

7、代理(Proxy):Aop离不开代理无论是JDK动态代理还是CGlib

8、切面(Aspect):切面有切点和增强组成,即可理解为在合适的连接点上写入合理的逻辑业务,是对横切性关注点的一种抽象。