classパッケージ名+クラス名変更classのバイトコードを取得

870 ワード

プロジェクトで指定したclassパッケージ名+クラス名で変更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バイトコードファイルをロードすると、この方法は使用できません.