多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] 动态代理:不用手动编写一个代理对象,不需要一一编写与目标对象相同的方法(静态代理), 这个过程,在运行时 的内存中动态生成代理对象。(字节码对象级别的代理对象) 动态代理的API: 在jdk的API中存在一个Proxy中存在一个生成动态代理的的方法newProxyInstance ~~~ static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h); ~~~ 返回值:Object就是代理对象 参数: ~~~ loader:代表与目标对象相同的类加载器---目标对象.getClass().getClassLoader() interfaces:代表与目标对象实现的所有的接口字节码对象数组 h:具体的代理的操作,InvocationHandler接口 ~~~ 注意:JDK的Proxy方式实现的动态代理,**目标对象必须有接口,没有接口不能实现jdk版动态代理** 这边TargetInterface是接口 ~~~ TargetInterface objProxy = (TargetInterface) Proxy.newProxyInstance( Target.class.getClassLoader(), //与目标对象相同的类加载器 new Class[]{TargetInterface.class}, //这个也行target.getClass().getInterfaces() new InvocationHandler() { //invoke 代表的是执行代理对象的方法 @Override //method:代表目标对象的方法字节码对象 //args:代表目标对象的响应的方法的参数 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("目标方法前的逻辑"); //执行目标对象的方法 Object invoke = method.invoke(new Target(), args); System.out.println("目标方法后的逻辑"); return invoke; } } ); objProxy.method1(); String method2 = objProxy.method2(); System.out.println(method2); ~~~