合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## 概念 代理类/代理对象就是增强类.就 已有类的功能进行增强. ## 动态代理 动态的给我们生成代理类/代理对象. java 已经给我们提供好了. proxy. 这个方式叫JDK的动态代理. ## 实例 ~~~ public static void main(String[] args) { final NormalPerson normalPerson = new NormalPerson(); //使用JDK提供的动态代理动态代理的方式增强 /** * 参数1:和要被增强的对象一样的类加载器 * 参数2:和要被增强的对象一样的接口 * 1.根据指定的传递接口返回一个该接口下的实例 * 2.传递的接口里面的方法就是可以被增强的所有方法,被增强类自己的方法无法被增强 * 参数3:所有的增强业务的实现(方法) */ Person proxyInstance = (Person) Proxy.newProxyInstance( normalPerson.getClass().getClassLoader(), normalPerson.getClass().getInterfaces(), //匿名内部类 new InvocationHandler() { //invoke里面就是所有的增强业务逻辑代码 /** * 参数1:不用管,永远是固定值,代理对象的类型 * 参数2:要被增强的方法 * 参数3:要被增强的方法运行过程中需要的参数 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //让之前的方法执行 /** * 参数1:本身执行这个方法的对象 * 参数2:执行这个方法需要的参数 */ method.invoke(normalPerson,args); //这里使用了normalPerson需要使用final进行修饰,否则会被垃圾回收机制进行回收 //写增强业务逻辑 System.out.println("走变飞"); return null; } } ); proxyInstance.run(); } ~~~