Java动态代理实现原理及使用示例
Java动态代理是Java语言中的一种高级技术,它可以在运行时根据需要创建对象的代理。
实现原理:
- 使用java.lang.reflect.Proxy类,它是所有动态代理的基础。
- 创建一个实现了目标接口的类(被代理类)。
- 使用Proxy.newProxyInstance()方法,传入目标类、目标接口以及当前类的对象,返回代理对象。
使用示例:
// 定义目标接口
interface Target {
void method();
}
// 定义被代理类,实现目标接口
class RealTarget implements Target {
@Override
public void method() {
System.out.println("Real target's method called");
}
}
// 使用Proxy创建代理对象
public class ProxyDemo {
public static void main(String[] args) {
// 获取被代理类的Class对象
Class<RealTarget> clazz = RealTarget.class;
// 创建目标接口的实现类
Target proxyTarget = new MyInvocationHandler(new RealTarget());
// 使用Proxy.newProxyInstance()方法创建代理对象
Proxy targetProxy = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{Target.class}}, proxyTarget);
// 测试代理对象的方法
targetProxy.method();
}
}
// 实现MyInvocationHandler,处理动态代理的invocation事件
class MyInvocationHandler implements InvocationHandler {
private final RealTarget realTarget;
public MyInvocationHandler(RealTarget realTarget) {
this.realTarget = realTarget;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 在实际调用方法之前,可以在这里做一些处理,比如日志记录、权限检查等
// 调用被代理类的方法
return method.invoke(realTarget, args));
}
}
这个示例创建了一个动态代理,实现了Target
接口的一个方法。在真实调用被代理对象方法前,可以在invoke
方法中添加自己的逻辑。
还没有评论,来说两句吧...