来说说我的理解。
目前如果我们要生成一个动态类,必须是指定这个动态代理类实现了哪些接口。我想这是在一开始JAVA设计人员实现了动态代理的功能,一个动态类实现若干个接口然后进行封装,相对比较简单。但是如果要是不需要接口的代理,可能要考虑比如说这个类是否是final等信息,开发出这个功能需要对class的文件格式指令集进行复杂设计,因此当初就没有实现。
但是后来出现cglib,有了这个开源项目,具体什么机制不清楚,可能是一些非常熟悉class的人开发的一个项目,可以对没有接口的类实现创建动态代理类,所以总体上看,不是已经“不需要必须有接口了么”。
按照张老师的话,cglib现在还不是JAVA官方的,但是根据这东西的性质,未来的几个版本迟早会成为官方承认的。 |