java代理类代码
时间: 2023-12-10 18:37:42 浏览: 31
下面是一个简单的 Java 代理类示例:
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyExample {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Subject proxy = (Subject) Proxy.newProxyInstance(RealSubject.class.getClassLoader(),
RealSubject.class.getInterfaces(), new SubjectProxy(realSubject));
proxy.request();
}
// 代理类实现 InvocationHandler 接口
static class SubjectProxy implements InvocationHandler {
private Object target;
public SubjectProxy(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before request");
Object result = method.invoke(target, args);
System.out.println("After request");
return result;
}
}
// 被代理的类必须实现一个接口
interface Subject {
void request();
}
static class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject request");
}
}
}
```
这个示例中,我们定义了一个 `Subject` 接口和一个实现该接口的 `RealSubject` 类。然后我们定义了一个代理类 `SubjectProxy`,它实现了 `InvocationHandler` 接口,并在其中实现了方法调用的前后添加了一些逻辑。最后,在 `main` 方法中,我们使用 `Proxy.newProxyInstance` 方法创建了一个代理对象,并将其转换为 `Subject` 接口类型。当我们调用代理对象的 `request` 方法时,代理对象会调用 `SubjectProxy` 中的 `invoke` 方法,并在其前后添加逻辑,最终调用 `RealSubject` 中的 `request` 方法。