Proxy.newProxyInstance
时间: 2024-04-28 12:22:37 浏览: 13
`Proxy.newProxyInstance` 是 Java 中的一个方法,用于创建一个动态代理对象。它接受三个参数:一个类加载器,一个接口数组和一个 `InvocationHandler` 对象。动态代理对象可以在运行时动态地创建一个实现指定接口的代理类,并将方法调用委托给 `InvocationHandler` 来处理。
使用 `Proxy.newProxyInstance` 可以实现一些横切关注点(cross-cutting concerns)的功能,比如日志记录、性能监控、事务管理等。通过动态代理,可以在不修改原始类代码的情况下,为其增加额外的行为。
以下是一个简单的示例代码,演示如何使用 `Proxy.newProxyInstance` 创建一个动态代理对象:
```java
public interface Foo {
void bar();
}
public class RealFoo implements Foo {
@Override
public void bar() {
System.out.println("RealFoo: executing bar()");
}
}
public class LoggingHandler implements InvocationHandler {
private final Object target;
public LoggingHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method: " + method.getName());
Object result = method.invoke(target, args);
System.out.println("After method: " + method.getName());
return result;
}
}
public class Main {
public static void main(String[] args) {
Foo realFoo = new RealFoo();
InvocationHandler handler = new LoggingHandler(realFoo);
Foo proxy = (Foo) Proxy.newProxyInstance(
Foo.class.getClassLoader(),
new Class[]{Foo.class},
handler);
proxy.bar(); // 通过代理对象调用方法
}
}
```
运行上述代码,将会在控制台输出以下内容:
```
Before method: bar
RealFoo: executing bar()
After method: bar
```
这说明 `LoggingHandler` 在方法调用前后添加了额外的日志输出行为。