// Java动态代理示例代码
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// 定义一个接口
interface Service {
void execute();
}
// 实现该接口的类
class RealService implements Service {
@Override
public void execute() {
System.out.println("Executing RealService");
}
}
// 创建一个InvocationHandler来处理代理对象的方法调用
class DynamicProxyHandler implements InvocationHandler {
private final Object realSubject;
public DynamicProxyHandler(Object realSubject) {
this.realSubject = realSubject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 在方法执行前做一些操作
System.out.println("Before method: " + method.getName());
// 调用实际对象的方法
Object result = method.invoke(realSubject, args);
// 在方法执行后做一些操作
System.out.println("After method: " + method.getName());
return result;
}
}
public class DynamicProxyExample {
public static void main(String[] args) {
// 创建实际对象
Service realService = new RealService();
// 创建动态代理对象
Service proxyService = (Service) Proxy.newProxyInstance(
realService.getClass().getClassLoader(),
realService.getClass().getInterfaces(),
new DynamicProxyHandler(realService)
);
// 通过代理对象调用方法
proxyService.execute();
}
}
Service
接口,它包含一个 execute
方法。RealService
类实现了 Service
接口,并提供了具体的实现逻辑。DynamicProxyHandler
类实现了 InvocationHandler
接口。它负责拦截对代理对象的所有方法调用,并在调用前后执行自定义逻辑。DynamicProxyExample
类中,我们使用 Proxy.newProxyInstance
方法创建了一个动态代理对象。这个代理对象会拦截所有对 execute
方法的调用,并通过 DynamicProxyHandler
来处理这些调用。execute
方法,观察到在方法执行前后会有额外的日志输出。通过这种方式,Java 动态代理允许我们在不修改原始代码的情况下,灵活地添加额外的功能或行为。
上一篇:java 获取当前日期
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站