Есть ли способ ввести последний класс с хитростью? - PullRequest
2 голосов
/ 25 июля 2010

У меня есть провайдер, который должен внедрить javax.mail.Session (провайдер ищет его в окружении контекста tomcat) как синглтон.Существует проблема, когда я использую инъекцию поля где-то в коде:

java.lang.IllegalArgumentException: Cannot subclass final class class javax.mail.Session

Есть ли способ обойти это?Только подсказки, которые я нашел, указывают на Spring AOP / Прокси.

Спасибо && regards

1 Ответ

2 голосов
/ 25 июля 2010

Посмотрите на это http://code.google.com/p/google-guice/wiki/AOP. Кажется, что есть некоторые ограничения:

Ограничения

За кулисами, перехват метода осуществляется путем генерации байт-кода во время выполнения.Guice динамически создает подкласс, который применяет перехватчики путем переопределения методов.Если вы находитесь на платформе, которая не поддерживает генерацию байт-кода (например, Android), вам следует использовать Guice без поддержки AOP.

Этот подход накладывает ограничения на то, какие классы и методы могут быть перехвачены:

Классы должны быть общедоступными или частными.Классы должны быть не финальными. Методы должны быть открытыми, частными или защищенными. Методы должны быть не финальными. Экземпляры должны создаваться Guice с помощью @Inject -аннотированного конструктора или конструктора без аргументов

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