请用Java实现一下动态代理
时间: 2023-11-13 12:25:01 浏览: 26
好的,下面是一个简单的使用Java实现动态代理的示例代码:
```
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// 代理接口
interface Subject {
void request();
}
// 被代理类
class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
// 代理类的调用处理器
class ProxyHandler implements InvocationHandler {
private final Subject subject;
public ProxyHandler(Subject subject) {
this.subject = subject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("ProxyHandler: Handling request.");
Object result = method.invoke(subject, args);
System.out.println("ProxyHandler: Done handling request.");
return result;
}
}
// 客户端代码
public class DynamicProxyDemo {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
InvocationHandler handler = new ProxyHandler(realSubject);
Subject proxySubject = (Subject) Proxy.newProxyInstance(
Subject.class.getClassLoader(),
new Class<?>[] { Subject.class },
handler);
proxySubject.request();
}
}
```
运行该程序,输出如下:
```
ProxyHandler: Handling request.
RealSubject: Handling request.
ProxyHandler: Done handling request.
```
这个示例演示了如何使用Java中的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现动态代理。在这个例子中,我们使用`RealSubject`作为被代理类,`ProxyHandler`作为代理类的调用处理器。在客户端代码中,我们通过`Proxy.newProxyInstance()`方法创建了一个动态代理对象,并调用了`request()`方法。在代理对象的`request()`方法中,我们先输出一条信息,然后调用被代理对象的`request()`方法,并在返回结果之后再输出一条信息。这样就完成了一次动态代理。