Spring AOP术语

一、链接点(Joinpoint)java

    程序执行的某个特定位置:如类开始初始化前、类初始化后、类某个方法调用前、调用后、方法抛出异常后。这些代码中的特定点,称为“链接点”。Spring仅支持方法的链接点,即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用先后这些程序执行点织入加强。数据库

 

二、切点(Pointcut)框架

    每一个程序类都拥有多个链接点,如一个拥有两个方法的类,这两个方法都是链接点。但在这为数众多的链接点中,如何定位到某个感兴趣的链接点上呢?AOP经过“切点”定位特定的链接点。经过数据库查询的概念来理解切点和链接点的关系:链接点至关于数据库中的记录,而切点至关于查询条件。一个切点能够匹配多个链接点。性能

    Spring中,切点经过Pointcut接口进行描述。代理

 

三、加强(Advice)对象

    加强是织入到目标类链接点上的一段程序代码。加强既包含了用于添加到目标链接点上的一段执行逻辑,又包含了用于定位链接点的方为信息,因此Spring所提供的加强接口都是带方位名的:BeforeAdvice(方法调用前的位置)、AfterReturningAdvice(访问返回后的位置)、ThrowsAdvice等。接口

 

四、目标对象(Target)get

    加强逻辑的织入目标类。编译器

 

五、织入(Weaving)io

    织入是将加强添加到目标类具体链接点上的过程。AOP有三种织入方式:

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

2)类装载期织入,这要求使用特殊的类装载器;

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

Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

 

六、切面(Aspect)

切面由切点和加强组成,它既包括了横切逻辑的定义,也包括了链接点的定义,Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的链接点中。

 

AOP的工做重心,主要包括两个:

1)如何经过切点和加强定位到链接点上;

2)如何在加强中编写切面的代码。

 

七、其余基础知识

    Spring AOP使用了两种代理机制:一种是基于JDK的动态代理,另外一种是基于CGLib的动态代理。之因此须要两种代理机制,很大程度上是由于JDK自己只提供接口的代理,而不支持类的代理。

    JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。

    CGLib采用很是底层的字节码技术,能够为一个类建立子类,并在子类中采用方法拦截的技术拦截全部父类方法的调用。

    有研究代表,CGLib所建立的动态代理对象的性能比JDK的所建立的代理对象的性能高了很多。但CGLib在建立代理对象时所花费的时间却比JDK动态代理多,因此对于singleton的代理对象或者具备实例池的代理,由于无须频繁建立代理对象,因此比较适合用CGLib动态代理技术,反之则适合用JDK动态代理技术。  CGLib不能对目标类中的final方法进行代理。

相关文章
相关标签/搜索