Перехват вызовов методов в java osgi

#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 и добавление к целевой платформе наводят меня на мысль, что вопрос касался проблемы переплетения во время выполнения.