jdk 动态代理

来源:互联网 发布:泉州旅游数据分析 编辑:程序博客网 时间:2024/06/18 11:48

看一个动态代理的例子
接口:

public interface Hello {    void sayHello(String name);}

实现:

public class HelloServiceImpl implements Hello {    @Override    public void sayHello(String name) {        System.out.println(" hello :" + name);    }}

代理类:

public class DynamicProxy implements InvocationHandler {    private Object target;    public DynamicProxy(Object target) {        this.target = target;    }    public <T> T getProxy() {        return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);    }    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        return method.invoke(target.getClass().newInstance(), args);    }}

调用:

public class ProxyDemo {    public static void main(String[] args) {        Hello hello = new DynamicProxy(new HelloServiceImpl()).getProxy();        hello.sayHello("peanut");    }}

具体的代码实现主要是 Proxy.newProxyInstance方法,该方法传递三个参数

  • ClassLoader loader 加载这个代理类的类加载器。
  • Class<?>[] interfaces 要实现代理的代理对象接口数组
  • InvocationHandler h 动态代理调用的方法
0 0
原创粉丝点击