2010-07-25 2 views
2

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

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

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

Благодарности & & рассматривает

ответ

2

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

Ограничение

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

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

Классы должны быть публичными или частными пакета. Классы должны быть не окончательным методы должны быть публичными, частный пакетом или защищенные методы должны быть неконечных экземпляры должны быть созданы Guice по @Inject -annotated или конструктор без аргументов

+0

спасибо, я буду тогда используйте обертку. – zeratul021

Смежные вопросы