classパッケージ名+クラス名変更classのバイトコードを取得
870 ワード
プロジェクトで指定したclassパッケージ名+クラス名で変更classのバイトコードを取得する必要がある
どのようにこの需要はとても簡単で、直接classloadで現在のclasspathを取得して、それからパッケージ名の中のを交換します.「/」に「.class」を付けると、変更classファイルを読み取ることができます.
しかし、クラスのclassファイルがあるjarパッケージに存在する場合、この方法は通用しない.
そこで様々な方法を考えて、JarFileで反復する方法(反復libの下ですべてのjarパッケージを下にして、それから中で対応する.classを探します)を考えましたが、ずっとこの方法の効率が低すぎると感じていました.
そこでasmとjavasisstの実装を見て、
....こんな風に来られるのか...、いろんな无言...
問題が解決した
しかし、classloadをカスタマイズするときに、カスタムパスのclassバイトコードファイルをロードすると、この方法は使用できません.
どのようにこの需要はとても簡単で、直接classloadで現在のclasspathを取得して、それからパッケージ名の中のを交換します.「/」に「.class」を付けると、変更classファイルを読み取ることができます.
しかし、クラスのclassファイルがあるjarパッケージに存在する場合、この方法は通用しない.
そこで様々な方法を考えて、JarFileで反復する方法(反復libの下ですべてのjarパッケージを下にして、それから中で対応する.classを探します)を考えましたが、ずっとこの方法の効率が低すぎると感じていました.
そこでasmとjavasisstの実装を見て、
/**
* Constructs a new {@link ClassReader} object.
*
* @param name the fully qualified name of the class to be read.
* @throws IOException if an exception occurs during reading.
*/
public ClassReader(final String name) throws IOException {
this(ClassLoader.getSystemResourceAsStream(name.replace('.', '/')
+ ".class"));
}
....こんな風に来られるのか...、いろんな无言...
問題が解決した
しかし、classloadをカスタマイズするときに、カスタムパスのclassバイトコードファイルをロードすると、この方法は使用できません.