生成一个动态代理接口的代码java
时间: 2023-06-18 17:08:37 浏览: 51
动态代理是Java中的一种高级特性,它允许在运行时动态生成一个代理类来实现接口或者继承一个类的功能。以下是一个简单的示例代码:
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxy implements InvocationHandler {
private Object target;
public DynamicProxy(Object target) {
this.target = target;
}
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;
}
public static void main(String[] args) {
// 创建被代理对象
Calculator calculator = new CalculatorImpl();
// 创建代理对象
DynamicProxy handler = new DynamicProxy(calculator);
Calculator proxy = (Calculator) Proxy.newProxyInstance(
calculator.getClass().getClassLoader(),
calculator.getClass().getInterfaces(),
handler);
// 使用代理对象调用方法
proxy.add(1, 2);
proxy.subtract(1, 2);
proxy.multiply(2, 3);
proxy.divide(4, 2);
}
}
interface Calculator {
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
int divide(int a, int b);
}
class CalculatorImpl implements Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public int divide(int a, int b) {
return a / b;
}
}
```
上面代码中,我们创建了一个代理类`DynamicProxy`,实现了`InvocationHandler`接口,并在`invoke`方法中实现了对目标对象方法的增强。然后创建了一个被代理对象`CalculatorImpl`,并在`main`方法中使用`Proxy.newProxyInstance`创建了一个代理对象,并调用了代理对象的方法来触发`invoke`方法的执行。