java动态代理
Jdk动态代理
通过获取委托类实现的所有接口,为每个接口方法创建一个代理方法,通过ProxyGenerator.generateProxyClass动态生成代理类字节码文件并加载,反射生成代理对象,调用的时候通过InvocationHandler调用invoke方法,在回调方法invoke中,使用反射调用原对象的方法method.invoke(target, args);
动态生成的代理类关键代码
Cglib动态代理
通过继承一个委托类,通过ASM框架strategy.generate(this)动态生成代理子类字节码文件并加载,反射生成对象,调用的时候可以通过intercept拦截方法,如果不拦截,则默认直接调用父类方法,intercept方法中proxy.invokeSuper(obj, args); 最终调用父类方法,可以在intercept方法中在调用proxy.invokeSuper(obj, args); 前后增加处理代码
动态生成的代理类关键代码