Подтвердить что ты не робот

Разница между аннотациями @Named и @ManagedBean в JSF2.0 Tomcat7

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

Однако я столкнулся с некоторыми ограничениями, используя @Named one (особенно при инъекции зависимостей и т.д.). Я не мог найти источник, где объясняется разница, и я был бы очень благодарен, если кто-то может дать приблизительный обзор когда использовать тот или иной.

4b9b3361

Ответ 1

@Named дает управляемое CDI bean имя EL, которое будет использоваться в таких технологиях, как JSF или JSP. Обратите внимание, что в приложении CDI вам не нужна аннотация @Named, чтобы сделать bean, управляемый CDI (спасибо @Karl за его комментарий).

@ManagedBean делает bean управляемым JSF, и вы можете:

  • вставить его в другой @ManagedBean, аннотированный beans (но не в @Named beans!)
  • доступ к нему из ваших представлений через язык выражений

См. этот связанный вопрос для получения дополнительной информации о том, как инъекция работает между обоими типами beans.

Обратите внимание, что существует также разница с объемом beans. Они поступают из разных пакетов, но называются одинаково (JSF: javax.faces.bean, CDI: javax.enterprise.context, поэтому он часто является источником ошибок и путаницы, если вы включаете неправильный класс.

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