1. Spring AOP
AOP(Aspect Oriented Programing)指面向切面编程,是通过预编译和运行时动态代理实现的一种技术。
1.1 AOP 相关概念
1.连接点:join point
指Java程序中的具有边界性质的特定位置,如类初始化之前,类初始化之后,方法调用前和方法调用后等。目前Spring仅支持类方法这样的join point,可以在方法前,方法后这样的连接点织入(weaving)增强(advice)。
2 切点:point cut
AOP把类方法作为查询条件,通过point cut找到连接点(join point),即让切点来筛选连接点,如目标类有5个方法, 程序只想让3个方法实现增强,剩余的2个不需要增强,那个就通过point cut从5个方法中,筛选出需要增强的3个方法。
3.通知:advice
advice是织入到目标类方法(即join point)的程序代码块,并且制定要织入的连接点的方位(方法前,方法后等),advice主要有AfterAdvice,BeforeAdvice,ThrowAdvice,MethodInterceptor和AfterReturningAdvice等。
4.目标对象:Target
advice的增强代码织入的目标类。
5.引入:Introduction
Introduction为类添加属性或者方法,这样是一些类在没有实现某些接口的情况下,动态的添加该接口的实现。
6.织入:weaving
织入是指将advice添加到目标类方法(即连接点)上的过程,Spring采用动态代理织入,AspectJ采用编译器期间和类加载期间织入。
7.代理:proxy
目标类被织入advice后,形成一个新的代理类,该代理类同时具有目标类和advice的功能。
8.切面:Aspect
切面包含了point cut和advice组成,point cut指定了在什么地方干(指定增强的目标类方法),advice指定了干什么(增强代码块)和什么时候(before or after)干。
8.指导顾问:advisor
在Spring IOC容器启动时,会根据我们的配置(xml或注解)生成一个个Advisor,构建形成一个Advisor责任链,然后通过遍历链,生成对应的代理类。
2.Spring AOP的流程:
spring aop.jpg说明:
在JDK的早期版本,Cglib代理性能要明显优于JDK动态代理,但是JDK8以后,JDK对JDK动态代理做了优化,目前性能和Cglib性能相当。
在Spring配置中加入<aop:aspectj-autoproxy proxy-target-class=“true”/>,强制使用CGLib代理。
网友评论