Spring Aop基础
Aop(Aspect Oriented Programming)是spring的第二大特点,于上一demo可知,spring对于统一处理某类功能,并且从结构上直接从业务代码中分离,可见Aop对于软件而言有着非常重要的意义。自己在项目中使用过的aop大致有:1、在生产环境已经跑了很长时间的成熟项目,在此基础上增加审计功能 2、多数据源的注解配置 3、日志信息。。。(后面会对其进行解析)
首先需要对术语进行解释,这一点很重要,介入一个例子:
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):切面有切点和增强组成,即可理解为在合适的连接点上写入合理的逻辑业务,是对横切性关注点的一种抽象。