Зачем нам нужен beans.xml при работе с веб-приложением JSF? - PullRequest
4 голосов
/ 30 мая 2011

Я начал веб-разработку с использованием JSF, после некоторого изучения JSP и сервлетов.

Когда вы создаете веб-приложение JSF, вы всегда (возможно, часто, но я не уверен, всегда ли это или нет)создать beans.xml, и вы ничего не напишите в нем.Но если этот файл не существует, веб-приложение JSF не будет работать.

В чем причина этого?

Зачем нам нужен этот файл?

Пожалуйста,подробное объяснение.

Ответы [ 3 ]

4 голосов
/ 30 мая 2011

Наличие файла beans.xml сигнализирует сервлет-контейнеру о том, что приложение использует JSR-299 (внедрение контекстов и зависимостей) - без него классы приложения также не будут сканироваться для аннотаций CDI, и внедрение зависимостей не будет выполняться,Если вы не используете CDI (например, вы используете только простые управляемые компоненты JSF), вам не нужен beans.xml.Если вы это сделаете, вы можете использовать файл (вместо аннотаций) для определения конфигураций CDI - это позволяет, например, предоставить тестовую конфигурацию, в которой некоторые зависимости заменяются на mocks.

3 голосов
/ 30 мая 2011

Добавление к ответу Михаила;CDI полезен не только в сочетании с JSF из-за поддержки инъекций, но также из-за его поддержки для использования с EL (язык выражений).Это особенность, от которой сильно зависит JSF.

Фактически, бины CDI могут почти полностью заменить управляемые бины JSF, и поэтому вы найдете множество примеров, использующих их, и большое количество книг JSF, рекомендующих их использование.Для приложений JSF компоненты CDI имеют, например, следующие преимущества:

  1. Может вводить меньшие области в большие области.Например, параметры GET в области запроса могут быть введены в bean-объект в области сеанса.Это невозможно с управляемыми компонентами JSF.
  2. Может использовать область диалога;область действия, которая порождает несколько разных страниц.

Очень прискорбно, что в JSF 2.0 и 2.1 чрезвычайно удобная область просмотра не поддерживается компонентами CDI по умолчанию, хотя такие расширения, как Seam, могут их добавлять.(обновление: в JSF 2.2 есть новая область просмотра, которая работает с компонентами CDI)

В целом путаница между компонентами JSF Managed и компонентами CDI такова, что для этого существует проблема спецификации JSF, см. http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-976

0 голосов
/ 31 января 2017

С Начало работы с внедрением контекстов и зависимостей и JSF 2.x

Когда приложение развернуто, сервер ищет управляемые компоненты CDI.В приложении Java EE 7 классы на пути сканируются на наличие аннотаций CDI по умолчанию.В приложении Java EE 6 классы сканируются на наличие аннотаций CDI, если модуль содержит файл beans.xml.

...