Моя цель - получить доступ к байту [], представляющему байт-код класса, без особого знания местоположения файлов класса во время выполнения.
Я рассмотрел два решения и смог добиться небольшого успехаодного из них, но мне было интересно, могут ли быть другие способы сделать это (или как я ошибся во втором решении, которое я не смог заставить работать).
Мой первый (слегка) успешныйРешением было использование класса java.lang.instrumentation ClassFileTransformer для доступа к байту [] классов.Несмотря на это, я предположил, что для этого должен быть более понятный способ.
Мое второе решение состояло в том, чтобы использовать JVM-аргумент -Xbootclasspath для замены java.lang.ClassLoader своим собственным, позволяя ему иметь доступбайт [] загруженных классов.Я добавил простое отладочное сообщение System.out.println, чтобы подтвердить, что переопределение ClassLoader работает, но это не так.Я получил эту идею из этой статьи на ту же тему.Мой класс был создан аналогично тому, как класс Integer был переделан в связанной статье.Я также использовал аналогичную настройку каталога для аргумента JVM, который выглядел примерно так:
java -Xbootclasspath/p:.\out\production\boot\java\lang TestLoader
Я думаю, что класс ClassLoader определенно не может быть переопределен с использованием метода в статье, которую я связал.
Мне было бы интересно узнать, почему моя попытка переопределения ClassLoader не сработала, а также услышать, что еще я могу сделать, чтобы получить доступ к байту [] классов.