Java委任コールBCEL/ASM
-
29-10-2019 - |
質問
こんにちはソフの親愛なるメンバー!
何を探していますか?Web周辺で検索して検索しています。クラスにインターフェイスを実装/注入するには(もちろんコンパイルされています)、クラスのインターフェイスで必要なメソッドを追加します。また、できる限りBCELとASMを学ぼうとしていますが、リソースが低い(親愛なる友人Googleでも)ので、ここで助けを見つけることができます!私はあなたがスプーンに私に何かを与えることを期待していませんが、私はいくつかの道順が必要です! :)私はASMサイトにある素晴らしい本と、それらについてのすべてについて非常に多くのチュートリアルがあることを知っていますが、以前に述べたように、どのようにしてインターフェイス/メソッドを追加できるのかを理解することはできません。何を試しましたか?このリンクを見つけました ここ しかし、それは私が期待していたようにうまくいきませんでした..私は自分がやりたいことを正確に知っていますが、どうすればそれを達成できるかわかりません。
public class Cat {
public int age;
}
public interface Animal {
public int getAge();
}
この方法の実装は次のとおりです。
public int getAge(){
return age;
}
親愛なるSOFメンバー、これはどのようにうまくいくでしょうか?
解決
私はBCELでいくつかの経験がありましたが、あなたが望むのは、再定義するクラスを検出するカスタムクラスローダーから始めることです。このようなクラスごとに、BCEL JAVACLASSオブジェクト(ClassLoadErrePositoryを使用してください)を取得し、そのクラスを好みに合わせて変更します。完了したら、Javaclassからクラスファイルを取得し、ClassLoader#DefineClassを使用して定義のためにJVMに渡します。
ここで、実際のメソッドを実装するために、コードを含むテストクラスを作成し、結果のクラスファイルでBcelifierを実行して、そのクラスファイルを生成するために必要なJava BCelソースコードを印刷することをお勧めします。それを検査し、あなたの好みに合わせてコピーしてください。