前言
Java动态代理可以实现动态生成代理类,而不需要手动写代理类,在使用上比较方便,而代理模式可以用于实现统计,拦截逻辑等统一管理控制的目的,比如在Retrofit中就用到了动态代理。
使用方法
先定义一个接口:
interface Animal { void eat(); }
然后动态生成代理类对象:
Animal proxy = (Animal) Proxy.newProxyInstance(Animal.class.getClassLoader(), new Class[]{Animal.class}, (proxy1, method, args1) -> { System.out.println("invoke, " + method.getName()); // 调用真实对象的方法 return null; });
最后调用方法:
proxy.eat();
调用该方法时,就会跑到InvocationHandler的invoke方法中,然后在该方法中去调用真实对象的方法,或者做一些统计逻辑,拦截逻辑等等。