Java动态代理原理及应用实例
Java动态代理是一种在运行时生成对象的机制,主要通过java.lang.reflect包下的Proxy和InvocationHandler两个类来实现。
原理:
- 创建一个 InvocationHandler 实现者。
- 使用 Proxy 类创建一个动态代理对象,并将之前创建的 InvocationHandler 作为参数传递给 Proxy 构造方法。
- 当调用这个动态代理对象的方法时,实际上会通过 InvocationHandler 进行转发和处理。
应用实例:
以下是一个简单的代理对象示例,它实现了对目标方法的重写:
// 目标类
public class Target {
public int sayHello() {
return 10;
}
}
// 代理类(InvocationHandler)
public class ProxyHandler implements InvocationHandler {
private Target target;
// 设置目标对象
public void setTarget(Target target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before calling target method...");
// 调用目标方法
int result = target.sayHello();
System.out.println("After calling target method...");
return result;
}
}
// 使用动态代理
public class Client {
public static void main(String[] args) {
Target target = new Target();
ProxyHandler handler = new ProxyHandler(target);
// 创建动态代理对象
Proxy proxy = (Proxy) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
handler
);
// 调用动态代理对象的方法
int result = proxy.invoke(target, null));
System.out.println("Result: " + result);
}
}
在这个例子中,我们创建了一个Target
类,它有一个方法sayHello()
。然后我们创建了ProxyHandler
作为代理的实现,这个处理器会重写目标方法。
最后在Client
类中,我们创建了一个动态代理对象,并通过它调用目标方法,结果会被打印出来。
还没有评论,来说两句吧...