Java动态代理:目标类和代理类的代理逻辑
在Java中,动态代理主要通过java.lang.reflect包下的Proxy、InvocationHandler等接口实现。下面以一个简单的例子来说明目标类和代理类的代理逻辑。
- 定义目标类(比如我们有一个
Calculator
类)
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
- 创建代理类,这里我们通过实现InvocationHandler接口来创建代理:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ProxyCalculator implements InvocationHandler {
private Calculator calculator;
public ProxyCalculator(Calculator calculator) {
this.calculator = calculator;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String methodName = method.getName();
if ("add".equals(methodName)) {
int a = (int) args[0];
int b = (int) args[1];
return calculator.add(a, b);
} else {
throw new IllegalAccessException("Method not allowed: " + methodName);
}
}
}
- 使用代理类,我们创建一个
ProxyCalculator
的实例,并用这个代理对象调用目标方法:
public class Main {
public static void main(String[] args) throws Throwable {
Calculator calculator = new Calculator();
ProxyCalculator proxyCalculator = new ProxyCalculator(calculator);
// 通过代理调用目标方法
System.out.println(proxyCalculator.add(1, 2)); // 输出: 3
}
}
以上就是Java动态代理中,目标类和代理类的代理逻辑的基本示例。
还没有评论,来说两句吧...