一、 增强类包含的信息:
a) 横切逻辑(插入的具体代码)
b) 部分连接点信息(在方法的哪个位置插入代码,比如方法前、方法后等)。
二、 增强的类型
每一种增强有一个需要实现的增强类。
a) 前置增强
顾名思义,在目标方法前实施增强。
增强类:org.springframework.aop.MethodBeforeAdvice.
举例,三步走:
1) 第一步,创建目标类接口和目标类:
2) 第二步,实现MethodBeforeAdvice,创建增强类:
3) 第三步,通过ProxyFactory把增强织入目标类,并生成代理。
4) 第三步改为在XML中配置:
- 配置中当然还有一些其他属性。比如singleton,决定返回是否为单实例等。
- 三个P分别为:指定代理的接口、指定目标类、指定增强
5) 注意事项:
- ProxyFactory 内部使用JDK代理或CGLib代理。
- 通过ProxyFactory的setInterfaces可以指定针对接口进行代理(这时ProxyFactory就使用JDK动态代理。)
- 如果是针对类的代理,则使用CGLib。
- 通过ProxyFactory 的setOptimize(true)可启动自动优化代理。
b) 后置增强
c) 环绕增强(综合实现了前置、后置增强)
d) 异常抛出增强
常用于事务管理,当参与事务的某个Dao发生异常时,事务管理器就必须回滚事务。这时可以在增强逻辑中写回滚代码。
e) 引介增强
引介增强是一种比较特殊的增强类型,它不是在目标方法周围织入增强,而是为目标类创建新的方法和属性
所以,引介增强的连接点是类级别的,而非方法级别。
所以,我们可以给目标类添加一个接口的实现,即原来目标类未实现某个接口,通过引介增强可以为目标类创建某接口的代理。
举例:三步走:
1) 第一步,定义接口
第四行是我们企图加在目标类上的增强方法。
2) 第二步,通过XML配置把增强织入目标类
3) 第三步,强制实现