在 Java 中,Proxy(代理)通常可以从实现方式和使用场景两个维度来分类。下面系统地给你梳理一下。
特点
示例
interface Service {
void doSomething();
}
class RealService implements Service {
public void doSomething() {
System.out.println("真实业务");
}
}
class ProxyService implements Service {
private RealService real = new RealService();
public void doSomething() {
System.out.println("前置处理");
real.doSomething();
System.out.println("后置处理");
}
}
优点
缺点
特点
java.lang.reflect.Proxy 在运行期生成示例
Proxy.newProxyInstance(
loader,
new Class[]{Service.class},
(proxy, method, args) -> {
System.out.println("前置");
return method.invoke(real, args);
}
);
优点
缺点
特点
示例
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(RealService.class);
enhancer.setCallback((MethodInterceptor) (obj, method, args, proxy) -> {
System.out.println("前置");
return proxy.invokeSuper(obj, args);
});
优点
缺点
final 类 / 方法常用于:
| 类型 | 实现方式 | 是否需接口 | 典型应用 |
|---|---|---|---|
| 静态代理 | 手写类 | 是 | 简单包装 |
| JDK 动态代理 | 反射 | 是 | Spring AOP |
| CGLIB | 继承 | 否 | Spring AOP |
| 字节码工具 | ASM等 | 否 | 框架底层 |
如果你愿意,我也可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。