代理

  1. 静态编译:AspectJ,生成的是class文件,class文件的类名和原来的类名是相同的。
  2. 动态生成:JDK(如果有两个接口不是public且包不相同,则抛异常)和cglib

JDK动态代理

  1. 如果有一个接口不是public,代理类就不是public,如果两个接口都不是public而且包名不同,则抛异常。
  2. 代理类继承了Proxy方法。
  3. 下面是生成代理类的核心,ProxyGenerator方法的这个类是public。
    byte[] proxyClassFile = ProxyGenerator.generateProxyClass(proxyName, interfaces, accessFlags);
    protected Proxy(InvocationHandler h):构造函数,用于给内部的h赋值。

static Class getProxyClass (ClassLoaderloader, Class[] interfaces):获得一个代理类,其中loader是类装载器,interfaces是真实类所拥有的全部接口的数组。

static Object newProxyInstance(ClassLoaderloader, Class[] interfaces, InvocationHandler h):返回代理类的一个实例,返回后的代理类可以当作被代理类使用(可使用被代理类的在Subject接口中声明过的方法)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容