Joinpoint
通过spring AOP 的两种实现方式,
- 动态代理
- CGLIB动态字节码增强技术
可以得出,springAOP 只支持方法执行时 ,Method Execute
Pointcut
常见的Pointcut
常见的PointcutAdvice
Advice略图before Advice
存在两种类型的Advice
pre-class 类型, 即所有实例共享一个对象
pre-instance类型, 所有实例,每个人都有一个
Introduction
Introduction相关类图结构AOP 的织入
ProxyFactory
并非springAOP 中唯一可用的注入器,而是最基本的一个织入器的实现
使用ProxyFacotry对象,只需要指定如下两个最基本的东西
- 要对齐进行织入的目标对象,可以通过构造方法传入,或者通过set方法
- 将要应用到目标对象的Aspect 在Spring 中叫做Advistor
- 对于Introduction之外类型的Advice类型,ProxyFactory内部就会为这些Adcice构造相应的Advistor,只不过在为他们构造的Advistor中使用的Pointcut为pointc.TRUE.
- 添加Introduction类型,则会根据该Introduction的具体类型进行区分:如果是IntroductionInfo的子类实现,因为本身包含了必要的描述信息,框架内部会为其构造一个DefaultIntruductionAdvistor; 如果是DynamicIntroductionAdvice的子类实现,框架内部会抛出异常。
ProxyFactory 基于目标类进行基于类的代理, 有以下三种情况
- 目标类没有实现任何借口
- 如果ProxyFactory 的 proxyTargetClass 的属性被置为TRUE
- 如果optimize的属性置为true
Introduction的织入
- Introduction 可以为已经存在的对象类型添加新的行为,只能用于对象级别的拦截,而不是通常Advice方法级别的拦截。所以,在进行Introduction的织入过程中,不需要指定Pointcut,只需要指定目标接口类型。
- Spring 的Introduction支持只能通过接口定义为当前对象添加新的行为,所以我们需要在织入的时机,指定新织入的接口类型。
网友评论