Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Обзор CDI

CDI — это набор сервисов, которые, используемые вместе, облегчают разработчикам использование Enterprise-бинов вместе с JavaServer Faces в веб-приложениях. Разработанный для использования с объектами, сохраняющими состояние, CDI также имеет много более широкое использования, что даёт разработчикам большую гибкость при интеграции различных типов компонентов слабосвязным, но типобезопасным (typesafe) способом.

CDI 2.0 определяется JSR 365. Связанные спецификации, которые использует CDI:

  • JSR 330, инъецирование зависимостей в Java

  • Спецификация Managed Beans, ответвление от спецификации платформы Java EE (JSR 366)

CDI предоставляет следующие основные сервисы.

  • Контексты. Этот сервис позволяет связать жизненный цикл и взаимодействия компонентов, сохраняющих состояние, с чётко определёнными, но расширяемыми контекстами жизненного цикла.

  • Инъецирование зависимостей. Этот сервис позволяет инъецировать компоненты в приложение типобезопасным (typesafe) способом и выбирать во время развёртывания, какую реализацию конкретного интерфейса инъецировать.

Помимо этих, CDI предоставляет следующие сервисы:

  • Интеграция с языком выражений (EL), который позволяет использовать любой компонент непосредственно на странице JavaServer Faces или JavaServer Pages.

  • Способность декорировать инъецированные компоненты

  • Способность типобезопасно (typesafe) связывать Interceptor-ы с компонентами

  • Модель события-уведомления

  • Область видимости веб-диалога (web conversation) в дополнение к трём стандартным областям видимости (запроса, сессии и приложения), определённым в спецификации Java Servlet

  • Полный интерфейс Service Provider Interface (SPI), который позволяет сторонним фреймворкам интегрироваться со средой Java EE

Основная тема CDI — слабосвязность. CDI делает следующее:

  • Разъединяет сервер и клиент с помощью чётко определённых типов и квалификаторов, так что реализация сервера может отличаться

  • Разъединяет жизненные циклы взаимодействующих компонентов

    • Создание компонентов контекстно, с автоматическим управлением жизненным циклом

    • Предоставление компонентам, сохраняющим состояние, возможности взаимодействовать как сервисы исключительно путём передачи сообщений

  • Полностью отделяет производителей сообщений от потребителей с помощью событий

  • Разделяет ортогональные операции с помощью Interceptor-ов Java EE

Наряду со слабосвязностью, CDI обеспечивает сильную типизацию

  • Устранение поиска по строковым именам, что даёт возможность компилятору обнаружить ошибки ввода

  • Позволяет использовать декларативные аннотации Java для определения чего угодно, в значительной степени устраняя необходимость в дескрипторах развёртывания XML и упрощая использование инструментов, анализирующих код и разбирающих структуру зависимостей в процессе разработки


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)