3
Насколько я понимаю, API-интерфейс Attach, введенный в Java 6, позволяет осуществлять межпроцессное изменение классов, запущенных в целевом JVM с помощью агентов. Мои вопросы:Ограничения и область применения Java Attach API
- Является ли эта стратегия ограничивается только приборами классов, которые не загружены мишенью JVM? и
- Каковы пределы этих преобразований?. Например, можно изменить только тело существующих методов? Или все в определении класса можно изменить?
Я вижу. Это бесполезно, что не позволяет добавлять новые методы. Я думал, пытаясь добавить новый интерфейс к определению класса, но если добавление методов не возможно, это не сработает :(Как вы думаете, я должен был бы сделать что-то вроде предоставления определенной реализации существующей абстрактной методы и изменение класса от абстрактного до не абстрактного? – Sergio
Это может быть возможно, но я не вижу, как вы планируете его использовать. Если это абстрактный класс, вы должны создать его экземпляр где-то. создавая экземпляр, вы всегда можете динамически генерировать класс, расширяющий абстрактный. У вас может быть пользовательский загрузчик классов для загрузки байтов нового класса. Нет необходимости изменять оригинал. – jdb
hi @jdb, это именно то, что я делаю прямо сейчас (используя Javassist), но трудно взаимодействовать с другими фреймворками (такими как Hibernate) с техникой расширения исходного абстрактного класса (учитывая, что и моя библиотека, и Hibernate хотят использовать одно и то же t классов). Отсюда мой вопрос о том, как я могу изменить исходный класс. К сожалению, неспособность добавлять новые методы в класс является для меня сильным ограничением, поэтому API Attach API по-прежнему не выглядит идеальным решением :( – Sergio