获取动态代理目标对象
时间: 2024-08-28 13:03:52 浏览: 36
动态代理是一种在运行时创建代理对象并让其代理其他对象的功能。它主要用于实现AOP(面向切面编程),通过代理可以在不修改原有对象的情况下增加额外的行为或对目标对象的操作进行拦截。在Java中,可以使用`java.lang.reflect.Proxy`类以及`InvocationHandler`接口来获取动态代理的目标对象。
以下是一个简单的步骤:
1. 定义`InvocationHandler`实现类,该类负责处理代理对象接收到的所有请求,并决定如何转发给实际的对象或执行自定义操作。
```java
public class MyInvocationHandler implements InvocationHandler {
private Object target;
public MyInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 在这里添加拦截、增强功能等
System.out.println("Before invoking " + method.getName());
Object result = method.invoke(target, args);
System.out.println("After invoking " + method.getName());
return result;
}
}
```
2. 使用`Proxy.newProxyInstance`方法生成动态代理对象,传入相关的类加载器、接口数组以及`InvocationHandler`实例。
```java
Class<?>[] interfaces = new Class[]{MyInterface.class}; // 替换为你的接口
Object targetObject = ...; // 实现了上述接口的实际对象
MyInvocationHandler handler = new MyInvocationHandler(targetObject);
MyInterface dynamicProxy = (MyInterface) Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
interfaces,
handler
);
```
现在,`dynamicProxy`就是一个动态代理对象,你可以像使用普通的`MyInterface`对象一样调用它的方法,但所有方法的调用都会经过`MyInvocationHandler`的拦截。
阅读全文