Разница между аннотациями @Named и @ManagedBean в JSF2.0 Tomcat7
Это может быть нубский вопрос, однако во многих уроках и примерах я видел, что эти аннотации использовались так, как будто они делали то же самое.
Однако я столкнулся с некоторыми ограничениями, используя @Named
один (особенно с внедрением зависимости и т. д.) Я не смог найти источник, где объясняется разница, и я был бы очень благодарен, если бы кто-то мог дать приблизительный обзор того, когда использовать тот или иной.
1 ответ
@Named
дает управляемому компоненту CDI имя EL для использования в технологиях представления, таких как JSF или JSP. Обратите внимание, что в приложении CDI вам не нужно @Named
аннотация для создания компонента, управляемого CDI (спасибо @Karl за комментарий).
@ManagedBean
делает компонент управляемым JSF, и вы можете:
- добавить его в другие аннотированные bean-компоненты @ManagedBean (но не в bean-компоненты @Named!)
- доступ к нему из ваших взглядов через язык выражений
Посмотрите этот связанный вопрос для получения дополнительной информации, как инъекция работает среди обоих видов бобов.
Обратите внимание, что есть также разница с областью применения бобов. Они приходят из разных пакетов, но имеют одинаковые имена (JSF: javax.faces.bean
CDI: javax.enterprise.context
, поэтому, если вы включаете неправильный класс, это часто является источником ошибок и путаницы.
Из моего опыта: вы должны использовать бины CDI, когда это возможно, поскольку они более гибкие, чем бины, управляемые JSF. Единственным недостатком является то, что CDI не знает области видимости, поэтому вам нужно либо вернуться к @ManagedBean, либо использовать стороннее расширение, такое как Seam.