一、前言
- 这篇博客主主要记录关于 AOP 代理的几种方式
- 由繁至简分:手动代理,半自动代理,全自动代理
二、手动代理(分两种)
2.1 JDK动态代理
- 前提:目标类必须是 接口 + 实现 类型,否则无法代理
- 创建目标类
- 创建切面类
- 创建工厂类
- 创建测试类
- 测试结果
2.2 cglib 增强字节码
- 前提1:目标类可以是仅有实现类,也可以是接口 + 实现类,兼容两者
- 前提2:使用 cglib 必须导入依赖包 — spring-core-3.2.0.RC2.jar (版本不限)
- 切面类与上文共用
- 创建目标类(没有接口,直接实现类)
- 工厂类(与上文公用一个类,但新建一个方法)
- 创建测试类
- 测试结果
2.3 两者差异
- 使用情景不同:
- JDK 代理,目标类必须是接口 + 实现类格式
- Cglib 代理,既可以是仅接口,又可以是接口 + 实现格式
- 使用 cglib 时候,需要导入 cglib 所依赖的 jar 包
三、Spring编写代理半自动
-
前提:导包 — 核心4+1 、AOP联盟(规范)、spring-aop(实现)
-
目标类与上文 JDK 手动代理共用
-
创建切面类
-
Spring 配置
-
创建测试类
-
测试结果
四、Spring AOP全自动编程
- 前提:导包
- 切面类对象和目标类对象与半自动共用
- 配置 beans.xml 文件
- 创建测试类
- 测试结果
五、个人总结
- 可以从代码量很明显的发现,三者是由繁至简,一个比一个少
- 三者相比,需要手动配置的内容也越来越少
- 但是,不变的是对于目标类和切面类的声明都是必须可少的