Java добавляет новые функции в класс библиотеки - PullRequest
0 голосов
/ 18 августа 2011

Проблема: приложение использует некоторую библиотеку.Например:

ClassA a=new ClassA();

В этой библиотеке classA использует classB - например, вызывает некоторый метод из classB.Мне нужно изменить, как работает этот метод.Можно ли обойтись без использования АОП?Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Есть два варианта:

а) изменить источник
б) изменить байтовый код

а) означает: скачать исходный код, изменить его, собрать и использовать собственную версию. Недостаток: для каждой новой версии библиотеки вам нужно будет создать новую исправленную версию

б) Для этого АОП (возможно, с использованием AspectJ) является самым простым способом. Другие варианты - сделать это программно, используя commons / bcel или cglib . AOP проще, потому что вам нужно только реализовать желаемое поведение, в то время как при использовании манипулирования байтовым кодом вам также придется много программировать инфраструктуру (например, предоставить собственный ClassLoader или Java Agent, который запускает ваш патч).

Альтернатива в) часто является лучшей: обратитесь к разработчику библиотеки и попросите его предоставить необходимую вам функциональность.

1 голос
/ 18 августа 2011

Вы можете создать подкласс ClassA, если ClassA не является окончательным.Вам, вероятно, следует скачать исходный код библиотеки и посмотреть, как она работает - только создать подкласс в качестве крайней меры - вы не хотите ломать библиотеку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...