newProxyInstance
时间: 2023-10-15 14:07:19 浏览: 80
newProxyInstance 方法是 Java 中的一个静态方法,它可以用来创建一个动态代理对象。动态代理是一种非常强大的技术,它可以在运行时生成一个代理对象,这个代理对象可以拦截被代理对象的所有方法调用,并进行自定义的处理。
该方法的签名如下:
```
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
```
其中,loader 参数是一个 ClassLoader 对象,用于加载动态生成的代理类;interfaces 参数是一个 Class 对象数组,表示被代理类实现的接口;h 参数是一个 InvocationHandler 对象,用于处理代理对象的方法调用。
使用 newProxyInstance 方法创建动态代理对象的步骤如下:
1. 创建一个 InvocationHandler 对象,实现 invoke 方法来处理代理对象的方法调用逻辑;
2. 调用 newProxyInstance 方法创建代理对象,并将 InvocationHandler 对象作为参数传入;
3. 使用代理对象调用方法。
示例代码:
```
public interface Hello {
void sayHello();
}
public class HelloImpl implements Hello {
@Override
public void sayHello() {
System.out.println("Hello, world!");
}
}
public class HelloInvocationHandler implements InvocationHandler {
private Object target;
public HelloInvocationHandler(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) {
Hello hello = new HelloImpl();
InvocationHandler handler = new HelloInvocationHandler(hello);
Hello proxyHello = (Hello) Proxy.newProxyInstance(hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), handler);
proxyHello.sayHello();
}
}
```
输出结果:
```
Before method sayHello
Hello, world!
After method sayHello
```
阅读全文