一、惊堂案例:未卜先知的用户服务
想象这样一个场景:你需要为UserService添加访问日志,但不想污染业务代码,该怎么办?动态代理的黑魔法就此展开!
public interface UserService {
void createUser(String name);
}
public class UserServiceImpl implements UserService {
public void createUser(String name) {
// 业务代码...
}
}
二、基础筑基:动态代理三重门
2.1 代理模式进化论
手动编码
运行时生成
字节码增强
静态代理
动态代理
JDK动态代理
CGLIB代理
2.2 两大阵营终极对决
| 特性 | JDK动态代理 | CGLIB代理 |
|---|---|---|
| 实现方式 | 接口代理 | 继承代理 |
| 速度 | 调用快(~6倍反射调用速度) | 生成慢但调用快 |
| 限制 | 必须实现接口 | 不能代理final类/方法 |
| Spring选择 | 默认方式 | 需要配置@EnableAspectJAutoP |

最低0.47元/天 解锁文章
570

被折叠的 条评论
为什么被折叠?



