在 Java 里“Proxy 代理”通常指 JDK 动态代理(java.lang.reflect.Proxy),但在实际选型时,常会和 CGLIB / Byte Buddy / AspectJ 等一起比较。下面从使用场景、能力边界、优缺点来梳理“怎么选”。
Java 中常见的代理方案:
Proxy.newProxyInstance(
classLoader,
new Class[]{Service.class},
invocationHandler
);
class UserService 无接口)final 方法你有接口,想做轻量 AOP,不想引入第三方库
finalfinal 类 / final 方法没有接口,又必须做代理(Spring 内部常这么干)
你在写中间件 / 框架,而不是普通业务代码
private 方法、构造器)JDK / CGLIB 代理做不到,你又必须织入
| 场景 | 推荐 |
|---|---|
| 有接口 | ✅ JDK Proxy |
| 无接口 | ✅ CGLIB |
| Spring AOP | 自动选(接口→JDK,类→CGLIB) |
| 框架/底层 | Byte Buddy |
| 编译期织入 | AspectJ |
| 简单写死 | 静态代理 |
写代码时:优先面向接口编程
public interface UserService {}
public class UserServiceImpl implements UserService {}
这样:
如果你愿意,可以告诉我:
我可以直接帮你选并给示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。