spring的aop详解

1、aop术语java

一、链接点joinpoint: 程序执行的某个特定位置:如类开始初始化以前、类初始化以后、类某个方法调用前、调用后等。Spring仅支持方法的链接点,即仅能在方法调用前、方法调用后以及方法调用先后的这些程序执行点织入加强spring

二、切点pointcut:每一个程序类都拥有许多链接点,如一个拥有两个方法的类,这两个方法都是链接点,AOP经过切点定位特定链接点。经过数据库查询的概念来理解切点和链接点:链接点至关于数据库表中的记录,而切点至关于查询条件。链接点和切点不是一一对应的关系,一个切点能够匹配多个链接点。数据库

在Spring中,切点经过org.springframework.aop.Pointcut接口进行描述,它使用类和方法做为链接点的查询条件,Spring AOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的链接点;其实确切的说应该是执行点而非链接点,由于链接点是方法执行前、执行后等包括方位信息的具体程序执行点,而切点只定位到某个方法上,因此若是但愿定位到具体链接点上,还须要提供方位信息框架

三、加强advice:加强是织入到目标类链接点上的一段程序代码(比如AOP以黑客的身份往业务类中装入木马),加强还拥有一个和链接点相关的信息,这即是执行点的方位。结合执行点方位信息和切点信息,咱们就能够找到特定的链接点了,因此Spring提供的加强接口都是带方位名的:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。(有些将Advice翻译为通知,但通知就是把某个消息传达给被通知者,并无为被通知者作任何事情,而Spring的Advice必须嵌入到某个类的链接点上,并完成了一段附加的应用逻辑;)翻译

四、引介introduction:引介是一种特殊的加强,它为类添加一些属性和方法,这样即便一个业务类本来没有实现某个接口,经过AOP的引介功能,咱们能够动态的为该业务类添加接口的实现逻辑,让这个业务类成为这个接口的实现类。代理

五、织入weaving:对象

织入是将加强添加到目标类具体链接点上的过程,AOP就像一台织布机,将目标类、加强或者引介编织到一块儿,AOP有三种织入的方式:接口

       a.编译期间织入,这要求使用特殊的java编译器;开发

       b.类装载期织入,这要求使用特殊的类装载器;编译器

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

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

六、代理proxy:  一个类被AOP织入加强后,就产生出了一个结果类,它是融合了原类和加强逻辑的代理类

七、切面aspect:

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

     总结:AOP的工做重点就是如何将加强应用于目标对象的链接点上,这里首先包括两个工做:第一,如何经过切点和加强定位到链接点;第二,如何在加强中编写切面的代码。

 

2、aop介绍

Spring AOP使用了两种代理机制:一种是基于JDK的动态代理,一种是基于CGLib的动态代理;java提供了动态代理技术,容许开发者在运行期间动态的建立接口的代理实例,JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler,其中InvocationHandler是一个接口,能够经过实现该接口定义横切逻辑,并经过反射机制调用目标类的代码,动态的将横切逻辑和业务逻辑编织在一块儿。

使用JDK代理模式有一个限制,即它只能为接口建立代理实例

相关文章
相关标签/搜索