Вопрос по cdi, managed-bean, jsf – Почему существуют разные аннотации управления компонентами

37

В чем разница между

import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;

а также?(

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

Ваш Ответ

1   ответ
46

javax.enterprise.context.SessionScopedJSR 346) и все остальные аннотации подjavax.enterprise.context.* пакет поддерживает контекстКДИ, CDI предоставляет альтернативный, универсальный и более мощный механизм для внедрения зависимостей, управления компонентами и общего ресурса в пространстве Java EE. Это'является альтернативой управляемым JSF-компонентам и этоустановлен даже заменить механизм управления bean-компонентом JSF вгрядущая версия JSF.

В настоящее время JSF-компоненты и аннотированные компоненты CDI являются взаимозаменяемыми в любом данном веб-приложении Java EE (с учетом небольшого числа незначительных ограничений). Однако компоненты, аннотированные CDI, выходят далеко за рамки веб-уровня, поэтому спецификация Java EE развивается, превращая CDI в стандартный механизм bean и DI.

Хотя CDI может быть очевидным выбором для всей разработки Java EE, управляемые bean-компоненты JSF переносимы между сервлет-контейнерами (Tomcat) и серверами приложений (Glassfish, JBoss и т. Д.). Компоненты CDI могут жить только на полных серверах приложений. Снемного работы Тем не менее, Tomcat 7 может быть подключен для поддержки CDI.

В частности,javax.enterprise.context.SessionScoped это параллельная реализация JSF Session Scope в CDI. (

javax.faces.bean.SessionScopedJSR 314) и все остальные аннотации подjavax.faces.bean.* Пакет поддерживает механизм внедрения зависимостей JSF и механизм управления компонентами. Бины, аннотированные аннотациями JSF, полезны только на веб-уровне. Все области, доступные с аннотациями JSF, были реплицированы в спецификации CDI. (

javax.annotation.ManagedBeanJSR 316) и другие аннотации, относящиеся к DI вjavax.annotation.* попытка обобщить аннотации на основе JSF для других целей в спецификации Java EEне может быть использован конечным разработчиком.

Почему они существуют? Хорошо, IMO, переход от bean-компонентов JSF к bean-компонентам CDI является естественной эволюцией технологии. Бины JSF хорошо работали, но такие, как Spring, Guice и Seam, показали, что этой технологии недостаточно. Также была необходимость преодолеть разрыв между веб-компонентами и EJB-компонентами, и ответом на эту потребность является CDI.

Смотрите также эти связанные вопросы:

JSF: вспомогательные компоненты (@ManagedBean) или компоненты CDI (@Named)?Java EE 6 @ javax.annotation.ManagedBean против @ javax.inject.Named против @ javax.faces.ManagedBean

Похожие вопросы