Spring AOP

Joinpoint

通过spring AOP 的两种实现方式,

  • 动态代理
  • CGLIB动态字节码增强技术
    可以得出,springAOP 只支持方法执行时 ,Method Execute

Pointcut

Spring AOP_第1张图片
常见的Pointcut
Spring AOP_第2张图片
常见的Pointcut

Advice

Spring AOP_第3张图片
Advice略图
before Advice

存在两种类型的Advice
pre-class 类型, 即所有实例共享一个对象

pre-instance类型, 所有实例,每个人都有一个

Introduction
Spring AOP_第4张图片
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支持只能通过接口定义为当前对象添加新的行为,所以我们需要在织入的时机,指定新织入的接口类型。

你可能感兴趣的:(Spring AOP)