Разница между аннотациями @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.beanCDI: javax.enterprise.context, поэтому, если вы включаете неправильный класс, это часто является источником ошибок и путаницы.

Из моего опыта: вы должны использовать бины CDI, когда это возможно, поскольку они более гибкие, чем бины, управляемые JSF. Единственным недостатком является то, что CDI не знает области видимости, поэтому вам нужно либо вернуться к @ManagedBean, либо использовать стороннее расширение, такое как Seam.

Другие вопросы по тегам