gpt4 book ai didi

java - 使用 cglib 覆盖包本地方法

转载 作者:行者123 更新时间:2023-11-30 09:53:02 27 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

关于java - 使用 cglib 覆盖包本地方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com