Есть ли какие-либо недостатки в его использовании (кроме того факта, что функциональность добавлена в классы, что не очевидно из исходного кода)?
Одна вещь состоит в том, что ошибки, создаваемые манипулированием байт-кодом, скорее всего, будет сложнее диагностировать. Изучение исходного кода и отладка на уровне исходного кода будет сложнее.
вызывает ли это проблемы с безопасностью,
Верификатор должен (теоретически) не допустить, чтобы модифицированный байт-код нарушил систему типов ядра и повредил JVM. (И само собой разумеется, что недоверенному коду нельзя разрешать вносить изменения в байт-код, поэтому мы можем сбрасывать со счетов этот сценарий.) Однако в прошлом некоторые средства проверки байт-кода Java были менее чем тщательными.
Кроме того, модификация байт-кода:
- затрудняет проведение надлежащего анализа безопасности на основе исходного кода, а
- может свести на нет (ограниченные) преимущества безопасности при использовании инструмента статического анализа, такого как FindBugs.
сериализация и т. Д .?
Модификация байт-кода может делать вещи, которые сделают существующие сериализованные объекты читаемыми модифицированным классом; например добавляя и удаляя поля, или изменяя классы суперкласс и интерфейсы. Однако вы можете сделать то же самое, изменив исходный код.