Comments 8
Подписался на продолжение!
0
Ответ очевиден – приложение не может само себя изменять.
По мне так не очевиден. Приложение очевидно может сгенерировать байткода, загрузить его класслоадером, и вызвать полученные классы. И чем это не изменение самого себя? А тот же javaagent — это отдельное приложение, или часть того же самого приложения? А если он в том же самом jar, что и основная часть (или вы считаете, что так нельзя)? Не то чтобы это была претензия по сути, скорее — нужно четче определить что вы тут называете приложением. По мне, так та часть, что изменяет байткод, должна (ну как правило) знать, что за код она изменяет. И их вполне можно считать частью одного приложения. Как скажем, ядро и plugins.
+4
Я вот тоже не понял этот момент, читал на ходу. Ломбок вот вроде отлично справляется с изменением байткода моего приложения.
0
Ответ очевиден – приложение не может само себя изменять. Т.е. приложение не может само изменять свой же байткод.Во времена былинные можно было писать и self-modifying байткод. Сейчас да, только через подгрузку классов.
0
К сожалению, в статье нет хорошего конкретного обоснования, зачем это нужно.
Предположим, вы нашли баг в библиотеке
Если в какой-то библиотеке баг, то надо не преобразовывать байткод, а исправлять эту ошибку в библиотеке.
А как можно использовать Javassist, в интернетах информации пруд пруди.
0
if ("com.company.Main".equals(className.replaceAll("/", "."))) {
...
}
return byteCode;
Автор, читайте внимательнее документацию, чтобы не нагружать приложение ненужной работой.
Returns:
a well-formed class file buffer (the result of the transform), or
null
if no transform is performed.
0
Sign up to leave a comment.
Знакомимся с Javassist