Java, перехватывающий вызовы метода интерфейса - PullRequest
1 голос
/ 30 марта 2012

Мне нужно перехватить вызовы для всех вызовов методов интерфейса. Я прошел через динамические прокси Java, но это мне не поможет. Я даже не уверен, что это может быть достигнуто, но думал о подтверждении.

Итак, в основном, скажем, у меня есть интерфейс следующим образом:

public interface Foo {        
   public String getValue();
}

Я хотел бы перехватить все вызовы getValue () из любых реализаций Foo. Проблема в том, что у меня нет контроля над различными реализациями Foo, из-за чего я не могу использовать динамические прокси.

Есть ли способ, которым я могу это сделать?

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 марта 2012

AOP может помочь, но, как вы обнаружили, все становится намного проще, если вы контролируете создание объекта (даже если только через DI-фреймворк, такой как Spring или Guice).альтернатива - ткачество байт-кода во время компиляции, то есть поиск всех реализаций и изменение их так, чтобы они содержали ваш код перехвата во время компиляции.Пользовательский загрузчик классов, который выполняет ткачество по мере загрузки классов в систему.Это ткачество во время загрузки.Но если вы находитесь, скажем, в веб-контейнере, где вы не полностью отвечаете за загрузчики классов, это может быть сложно.

1 голос
/ 30 марта 2012

Единственный способ сделать это - использовать собственный загрузчик классов, который заменяет классы реализации на прокси.

Возможно сделать это из коробки с помощью ткачества Spring AOP во время загрузки.

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