使用cglib覆盖package-local方法

时间:2010-10-29 06:51:31

标签: java cglib

我正在使用一个Java库,它使用cglib创建库用户提供的抽象类的子类,并提供用户留在那里的抽象方法的自动生成实现。

我的问题是,如果有问题的方法具有包本地(即默认)可访问性,我生成的方法显然会被忽略,并且用户在调用它时会得到一个AbstractMethodError。

我生成的类与原始类在同一个包中(我生成一个名为original.package.OriginalClassName_AutomaticImplementation的类),尽管它们当然是由不同的类加载器加载的(即加载生成的字节数组的类)通过cglib而不是磁盘文件);我怀疑这是问题所在。如果是这样,有什么办法吗?

1 个答案:

答案 0 :(得分:2)

使用package local时,类加载器是用于定义方法是否可访问的包名称。这是为了阻止类未经授权访问API方法。您可以在java.lang包中创建一个类,并访问java.lang中的包本地方法。

您可以尝试调整加载要扩展的类的类加载器,然后使用该类加载器加载cglib版本作为cglib加载器的父级。不知道它是否会起作用。