#java #osgi #aspectj #aspect
#java #osgi #aspectj #аспект
Вопрос:
В настоящее время я работаю над механизмом резервного копирования и восстановления для платформы на базе OSGi (java) и хотел бы выполнить следующее
ПАКЕТ A — некоторый пакет:
void methodDefinedByInterface(Class1 a, Class2 b){
...
}
Я хотел бы иметь возможность добавить что-то вроде аннотации к этому методу следующим образом:
@Backup
void methodDefinedByInterface(Class1 a, Class2 b){
...
}
Чтобы я мог собрать информацию о классе методе, а также сами переменные данные в другом пакете, чтобы я мог создать резервную копию этих данных, «Вызов метода для класса blabla в пакете blabla с параметрами … .. ..».
Возможно ли это в OSGi? Я прочитал AspectJ, но большая часть информации, которую я нашел, казалась довольно устаревшей. Или я могу добавить реализацию на целевую платформу?
Ответ №1:
Смотрите спецификацию ткацкого крючка в спецификации ядра OSGi. Вы можете реализовать перехват и встроить свои аннотации в загруженные классы, а также добавить необходимые операторы динамического импорта пакетов, чтобы классы имели видимость пакетов, содержащих ваши аннотации.
Комментарии:
1. Я думаю, что вопрос был больше о том, возможно ли это во время компиляции, а не в решении во время выполнения. Можно ли было бы добавить реализацию аннотации к целевой платформе, что сделало бы ее доступной для разработчиков, чтобы использовать ее без необходимости импортировать ее в свои пакеты?
2. Время компиляции не имеет ничего общего с OSGi framework (среда выполнения). Конечно, инструмент может изменять код, включая манифест пакета. Упоминание AspectJ и добавление к целевой платформе наводят меня на мысль, что вопрос касался проблемы переплетения во время выполнения.