в моем проекте у меня есть набор классов (имена и номера которых я не назначаю), к которым я хочу добавить публичный статический метод.
Для простоты предположим, что я хочу добавить статический метод, который возвращает экземпляр статического регистратора класса. Единственное требование - статическая функция должна вызываться следующим образом:
public class Foo {
private static final Logger LOG = LoggerFactor.getLogger(Foo.class);
public static void main(String[] args) {
Foo.getLogger().info("works!");
}
}
Поскольку я считаю, что это сквозная проблема, я думаю, что решил свою проблему с AspectJ здесь, но я не нашел никакой информации о моем сценарии.
Мои вопросы:
- если это вообще возможно?
- если да, то как этого достичь?
Мне известно о возможности динамического объявления родителя моих классов, реализующих интерфейс, но затем я застрял, потому что не могу генерировать статические методы в интерфейсе:
public aspect StaticMethodAspect {
public interface HasStaticMethod {}
declare parents: ... implements HasStaticMethod;
public static Logger HasStaticMethod.getLogger() { //aspect error
...
}
}
И я также знаю о этом решении , но оно не соответствует моему требованию о способе вызова метода.
Спасибо за любезный ответ