2

cglibを使用してライブラリユーザーが提供する抽象クラスのサブクラスを作成し、ユーザーがそこに残した抽象メソッドの自動生成された実装を提供するJavaライブラリを使用しています。

私の問題は、問題のメソッドがパッケージローカル(つまりデフォルト)のアクセス可能性を持っている場合、私が作成したメソッドは明らかに無視され、ユーザーが呼び出されたときにAbstractMethodErrorを受け取ることです。

私が生成するクラスは、元のクラスと同じパッケージにあります(original.package.OriginalClassName_AutomaticImplementationという名前のクラスを生成します)が、もちろん別のクラスローダー(つまり、cglibによって生成されたバイト配列をロードするクラス)によってロードされますディスクファイルより); 私の疑いは、これが問題だということです。もしそうなら、それを回避する方法はありますか?

4

1 に答える 1

2

パッケージローカルを操作する場合、メソッドがアクセス可能かどうかを定義するのはクラスローダーとパッケージ名です。これは、クラスがAPIメソッドに不正にアクセスするのを防ぐためです。java.langパッケージでクラスを作成し、java.langでパッケージのローカルメソッドにアクセスできます。

拡張するクラスをロードするクラスローダーを調整してから、そのクラスローダーをcglibローダーの親としてcglibバージョンをロードしてみてください。それが機能するかどうかわからない。

于 2010-10-29T09:47:28.927 に答える