java proxy动态代理怎么实现
在Java中,可以通过使用`java.lang.reflect.Proxy`类来实现动态代理。
首先,需要定义一个接口,代表被代理类和代理类都需要实现的方法。
```java
public interface Subject {
void doSomething();
}
```
然后,创建一个实现了该接口的被代理类。
```java
public class RealSubject implements Subject {
public void doSomething() {
System.out.println("RealSubject do something");
}
}
```
接下来,创建一个代理类,实现`InvocationHandler`接口,并覆盖它的`invoke`方法。
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ProxyHandler implements InvocationHandler {
private Object target;
public ProxyHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 在调用被代理类的方法之前,可以添加一些前置处理
System.out.println("Before calling the method");
// 调用被代理类的方法
Object result = method.invoke(target, args);
// 在调用被代理类的方法之后,可以添加一些后置处理
System.out.println("After calling the method");
return result;
}
}
```
最后,使用`Proxy.newProxyInstance`方法创建代理对象。
```java
public class Main {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
ProxyHandler proxyHandler = new ProxyHandler(realSubject);
// 创建代理对象
Subject proxySubject = (Subject) Proxy.newProxyInstance(
realSubject.getClass().getClassLoader(),
realSubject.getClass().getInterfaces(),
proxyHandler);
// 调用代理对象的方法
proxySubject.doSomething();
}
}
```
运行上述代码,将会输出以下结果:
```
Before calling the method
RealSubject do something
After calling the method
```
可以看到,通过动态代理,我们可以在调用被代理类的方法之前和之后添加一些额外的逻辑处理。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341