(spring-第17回【AOP基础篇】) 创建增强类

时间:2021-05-19 14:25:06

一、   增强类包含的信息:

a)   横切逻辑(插入的具体代码)

b)   部分连接点信息(在方法的哪个位置插入代码,比如方法前、方法后等)。

二、   增强的类型

每一种增强有一个需要实现的增强类。

a)   前置增强

  1. 顾名思义,在目标方法前实施增强。

  2. 增强类:org.springframework.aop.MethodBeforeAdvice.

  3. 举例,三步走:

1)   第一步,创建目标类接口和目标类:

  (spring-第17回【AOP基础篇】) 创建增强类

  (spring-第17回【AOP基础篇】) 创建增强类

2)   第二步,实现MethodBeforeAdvice,创建增强类:

(spring-第17回【AOP基础篇】) 创建增强类

3)   第三步,通过ProxyFactory把增强织入目标类,并生成代理。

(spring-第17回【AOP基础篇】) 创建增强类

4)   第三步改为在XML中配置:

(spring-第17回【AOP基础篇】) 创建增强类

    1. 配置中当然还有一些其他属性。比如singleton,决定返回是否为单实例等。
    2. 三个P分别为:指定代理的接口、指定目标类、指定增强

5)   注意事项:

    1. ProxyFactory 内部使用JDK代理或CGLib代理。
    2. 通过ProxyFactory的setInterfaces可以指定针对接口进行代理(这时ProxyFactory就使用JDK动态代理。)
    3. 如果是针对类的代理,则使用CGLib。
    4. 通过ProxyFactory 的setOptimize(true)可启动自动优化代理。

b)   后置增强

c)   环绕增强(综合实现了前置、后置增强)

d)   异常抛出增强

常用于事务管理,当参与事务的某个Dao发生异常时,事务管理器就必须回滚事务。这时可以在增强逻辑中写回滚代码。

e)   引介增强

  1. 引介增强是一种比较特殊的增强类型,它不是在目标方法周围织入增强,而是为目标类创建新的方法和属性

  2. 所以,引介增强的连接点是类级别的,而非方法级别。

  3. 所以,我们可以给目标类添加一个接口的实现,即原来目标类未实现某个接口,通过引介增强可以为目标类创建某接口的代理。

  4. 举例:三步走:

1)   第一步,定义接口

  (spring-第17回【AOP基础篇】) 创建增强类

  第四行是我们企图加在目标类上的增强方法。

2)   第二步,通过XML配置把增强织入目标类

(spring-第17回【AOP基础篇】) 创建增强类

3)   第三步,强制实现

(spring-第17回【AOP基础篇】) 创建增强类