Имеет ли смысл CDI, если нет веб-слоя и, следовательно, нет сеанса HTTP? - PullRequest
7 голосов
/ 26 января 2012

Новый JSR 299 "Контексты и внедрение зависимостей для Java EE", похоже, основан на концепции "Scope".

Бины создаются и связываются с одной из поддерживаемых областей: Приложение, Сеанс (сопоставленный с сеансом HTTP), Разговор и Запрос.

Имеет ли смысл использовать CDI, если нет сеанса HTTP (например, приложение Enterprise, предоставляющее функциональность посредством удаленного взаимодействия EJB), поскольку управляемые компоненты не будут связаны с каким-либо контекстом (поскольку они не существуют)

Можно ли вообще использовать CDI в таком сценарии? Какие преимущества это принесет?

Ответы [ 3 ]

3 голосов
/ 26 января 2012

Вы также можете создавать свои собственные области.CDI очень расширяем и может использоваться в различных ситуациях.Он также используется в приложениях SE, где нет ни HttpSession, ни HttpRequest.

3 голосов
/ 26 января 2012

Это напоминает мне мой собственный вопрос, который я задал некоторое время назад: Как @SessionScoped работает с EJB?Является ли CDI только для веб-уровня?

Похоже, что понятие «область действия» имеет значение только в случае HTTP-сессии.
Однако я вижу правильное использование *Область действия 1006 * как способ реализации одноэлементного компонента приложения, несмотря на то, что запрос является HTTP-запросом.

Javadoc говорит:

Область примененияактивен:

(...)

  • во время любого вызова веб-службы Java EE,

  • во время любого удаленного методавызов любого EJB, во время любого асинхронного вызова метода любого EJB, во время любого вызова метода времени ожидания EJB и во время доставки сообщения любому EJB-компоненту, управляемому сообщениями,

0 голосов
/ 16 марта 2012

Кроме того, CDI предназначен не только для управления жизненным циклом, вы можете использовать его для внедрения зависимостей, таким образом отделяя интерфейсы от их реализаций очень чистым способом. Вы также можете выполнить некоторые методы АОП, используя перехватчики и декораторы, или создать очень слабосвязанный шаблон Observer, используя преимущества событий CDI.

...