7月份中国移动数据出炉
我们关注点依旧放在可扩展性和可维护性上,Cglib 依旧符合「开闭原则」,如果小明需要小红代理购买红酒,该如何做呢?这里碍于篇幅原因,我不再将完整的代码贴出来了,可以自己试着手动实现一下,或者在心里有一个大概的实现思路即可。 我们来总结一下 CGLIB 动态代理: (1)CGLIB 的使用方法:
JDK Proxy 和 CGLIB 的对比
(2)仔细对比一下,JDK Proxy 和 CGLIB 具有相似之处: ntercept() 方法涉及到 4 个参数:
对于 methodProxy 参数调用的方法,在其内部有两种选择:invoke() 和 invokeSuper() ,二者的区别不在本文展开说明,感兴趣的读者可以参考本篇文章:Cglib源码分析 invoke和invokeSuper的差别
在 getInstance() 方法中,利用 Enhancer 类实例化代理对象(可以看作是小红)返回给调用者小明,即可完成代理操作。 到了这里,源码分析完了,是不是感觉被掏空了?哈哈哈哈,其实我当时也有这种感觉,不过现在你也感觉到,JDK 的动态代理其实并不是特别复杂吧(只要你有毅力) CGLIB CGLIB(Code generation Library) 不是 JDK 自带的动态代理,它需要导入第三方依赖,它是一个字节码生成类库,能够在运行时动态生成代理类对 「Java类 和 Java接口」 扩展。 CGLIB不仅能够为 Java接口 做代理,而且「能够为普通的 Java类 做代理」,而 JDK Proxy 「只能为实现了接口」的 Java类 做代理,所以 CGLIB 为 Java 的代理做了很好的扩展。「如果需要代理的类没有实现接口,可以选择 Cglib 作为实现动态代理的工具。」 废话太多,一句话概括:「CGLIB 可以代理没有实现接口的 Java 类」 下面我们来学习它的使用方法,以「小明找代理工厂买法国香水」这个故事背景为例子。
(1)导入依赖 (编辑:淮南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |