В чем разница между
import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;
и
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
?
В чем разница между
import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;
и
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
?
javax.enterprise.context.SessionScoped
(JSR 346), а все остальные аннотации в пакете javax.enterprise.context.*
поддерживают контекст CDI. CDI предоставляет альтернативный, универсальный и более мощный механизм для инъекций зависимостей, bean и общего управления ресурсами в пространстве Java EE. Это альтернатива JSF, управляемая beans, и она установила возможность даже заменить механизм управления JSF bean в предстоящей версии JSF.
В настоящее время JSF и CDI, аннотированные beans, взаимозаменяемы в любом данном веб-приложении Java EE (учитывая несколько незначительных ограничений). CDI, аннотированный beans, однако, выходит далеко за пределы области веб-уровня, поэтому спецификация Java EE развивается, чтобы сделать CDI стандартным механизмом bean и DI.
Хотя CDI может быть очевидным выбором для всей разработки Java EE, управляемые JSF beans являются переносимыми в контейнерах сервлетов (Tomcat) и серверах приложений (Glassfish, JBoss и т.д.). CDI beans может работать только с полными серверами приложений. С некоторые новички, однако Tomcat 7 может быть подключен для поддержки CDI.
В частности, javax.enterprise.context.SessionScoped
- это параллельная реализация области сеанса JSF в CDI.
javax.faces.bean.SessionScoped
(JSR 314), а все остальные аннотации в пакете javax.faces.bean.*
поддерживают JSF-специфичную инъекцию зависимостей и bean механизм управления. beans, аннотированные аннотациями JSF, однако полезны только в пределах веб-уровня. Все области, доступные с аннотациями JSF, были реплицированы в спецификации CDI.
javax.annotation.ManagedBean
(JSR 316) и другие связанные с DI аннотации в разделе javax.annotation.*
являются попыткой обобщения JSF- основанные на аннотациях для других применений в спецификации Java EE и на самом деле не должны использоваться конечным разработчиком.
Почему они существуют? Ну, ИМО, переход от JSF beans к CDI beans - это естественная эволюция технологии. JSF beans провели хороший прогон, но, как и Spring, Guice и Seam сделали очевидным, что технологии недостаточно. Необходимо также устранить разрыв между веб-компонентами и EJB, и ответ на эту потребность - это CDI.
См. также следующие связанные вопросы: