ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

代理(静态和动态)

代理(静态和动态) 一种设计模式提供对目标对象的另外一种访问方式通过代理对象访问目标对象1.静态代理代理类和目标类共同实现同一个接口实现例子接口代理类目标类测试类2.动态代理 基于jdk的动态代理和基于cglib的动态代理1.jdk的动态代理必须有接口前后服务不能写入已经写好的代理类里所以要有个专门写增强逻辑的代码代理类不是自己写的直接拿着代理类去创建对象例子测试类目标类增强规则类接口类静态代理和jdk动态代理区别静态代理自己手写代理类 Java 文件编译就存在。接口加新方法代理类必须手动重写增强代码分散在各个方法复用差。直接对象调用不用反射。JDK 动态代理不手写代理类运行时 JDK 在内存自动生成代理类字节码。只写InvocationHandler所有方法的增强全部写在invoke()一处接口新增方法不用改代理代码复用性强底层靠反射执行目标方法。2.基于cglib的代理不能代理被final实现的类或方法原理通过继承在继承目标方法的基础上实现更多的逻辑例子CGLIB拦截回调类 CallbackMethodjdk和cglib动态代理区别jdk动态1.代理对象实现目标接口类 2.原生jdk无需额外包 3.必须有接口cglib动态1.代理对象是目标类的子类 2.需要第三方cglib asm 3.不需要接口不能代理final类/final方法
返回列表