Ответ 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.