在 Java 中,“Proxy 代理”通常有两种常见含义:
下面重点讲 JDK Proxy(最常用、面试常考) 的用法。
public interface UserService {
void save(String name);
}
public class UserServiceImpl implements UserService {
@Override
public void save(String name) {
System.out.println("保存用户:" + name);
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler {
private Object target;
public MyInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法执行前");
Object result = method.invoke(target, args);
System.out.println("方法执行后");
return result;
}
}
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
UserService target = new UserServiceImpl();
UserService proxy = (UserService) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new MyInvocationHandler(target)
);
proxy.save("张三");
}
}
方法执行前
保存用户:张三
方法执行后
Proxy.newProxyInstance(
ClassLoader loader, // 类加载器
Class<?>[] interfaces, // 代理类要实现的接口
InvocationHandler h // 代理逻辑
)
⚠️ 注意
// 需要引入 cglib 或 spring-core
| 代理方式 | 是否需接口 | 性能 | 使用难度 |
|---|---|---|---|
| JDK Proxy | ✅ 必须 | 较高 | 简单 |
| CGLIB | ❌ 不需要 | 稍低 | 中等 |
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。