Я прочитал пару вопросов, связанных с общей проблемой выгрузки/перезагрузки класса во время выполнения, и это кажется сложной и несколько подозрительной проблемой. Однако мне интересно, как обстоит дело с классами, которые явно инструментированы во время выполнения с использованием отдельного ClassLoader, предназначенного для этой цели, и не имеют никакого экземпляра (потому что либо конструктор всегда генерирует исключение, либо класс даже не прошел проверку JVM)?
Я пытаюсь глубоко издеваться над произвольными графами классов модели предметной области (код библиотеки). Это scala, что означает, что это классы без конструкторов по умолчанию и которые вообще не принимают значения null
, поэтому мне нужно создавать экземпляры всех аргументов (и, в свою очередь, часто рекурсивно инструментировать их подклассы). Очевидно, что иногда это будет терпеть неудачу - как часто это зависит от стиля кодирования и того, сколько проверок выполняется в конструкторе. Поскольку я уже сталкиваюсь с риском издеваться над гораздо большим графом из-за зависимостей, которые были бы целесообразны, я стараюсь ограничиться одним лучшим способом создания класса и сдаюсь в случае неудачи, а не пробую разные конструкторы или разные значения, что могло бы, по крайней мере теоретически, увеличить мой уровень успеха.
В настоящее время я использую ByteBuddy, и, учитывая его полноту, кажется, что он уже может что-то делать?