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

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

Использование предопределённых бинов в приложениях CDI

Java EE предоставляет предопределённые компоненты, которые реализуют следующие интерфейсы.

  • javax.transaction.UserTransaction: пользовательская транзакция API транзакций Java (JTA).

  • java.security.Principal: абстрактное понятие принципала, который представляет любую сущность, например физическое лицо, корпорацию или идентификатор входа. При каждом обращении к инъецированному принципалу он всегда представляет идентификатор текущего вызывающего субъекта. Например, принципал инъецируется в поле при инициализации. Позже, метод, использующий инъецированного принципала, вызывается для объекта, в который этот принципал был инъецирован. В этой ситуации инъецированный принципал представляет идентификатор текущего вызывающего субъекта при запуске метода.

  • javax.validation.Validator: валидатор для объектов бина. Компонент, реализующий этот интерфейс, позволяет инъецировать объект Validator для объекта проверки компонента по умолчанию ValidatorFactory.

  • javax.validation.ValidatorFactory: фабричный класс для получения инициализированных объектов Validator. Компонент, реализующий этот интерфейс, позволяет инъецировать объект ValidatorFactory проверки компонента по умолчанию.

  • javax.servlet.http.HttpServletRequest: HTTP-запрос от клиента. Компонент, реализующий этот интерфейс, позволяет сервлету получать все детали запроса.

  • javax.servlet.http.HttpSession: HTTP-сессия между клиентом и сервером. Компонент, реализующий этот интерфейс, позволяет сервлету получать доступ к информации о сессии и помещать объекты в сессию.

  • javax.servlet.ServletContext: объект контекста, который сервлеты могут использовать для обращения к контейнеру сервлетов.

Чтобы инъецировать предопределённый компонент, создайте точку инъецирования для получения объекта компонента, используя аннотацию javax.annotation.Resource для ресурсов или аннотацию javax.inject.Inject для бинов CDI. Для типа компонента укажите имя класса интерфейса, который реализует компонент.

Таблица 27-1 Инъецирование предопределённых бинов

Предопределённый бин

Ресурс или бин CDI

Пример инъецирования

UserTransaction

Ресурс

@Resource UserTransaction transaction;

Principal

Ресурс

@Resource Principal principal;

Validator

Ресурс

@Resource Validator validator;

ValidatorFactory

Ресурс

@Resource ValidatorFactory factory;

HttpServletRequest

Бин CDI

@Inject HttpServletRequest req;

HttpSession

Бин CDI

@Inject HttpSession session;

ServletContext

Бин CDI

@Inject ServletContext context;

Предопределённые бины инъецируются с областью видимости @Dependent и предопределённым квалификатором по умолчанию @Default.

Для получения дополнительной информации об инъецировании ресурсов см. Инъецирование ресурсов.

В следующем фрагменте кода показано, как использовать аннотации @Resource и @Inject для инъецирования предопределённых бинов. Этот фрагмент кода инъецирует пользовательскую транзакцию и объект контекста в класс сервлета TransactionServlet. Пользовательская транзакция является объектом предопределённого компонента, который реализует интерфейс javax.transaction.UserTransaction. Объект контекста является объектом предопределённого компонента, который реализует интерфейс javax.servlet.ServletContext.

import javax.annotation.Resource;
import javax.inject.Inject;
import javax.servlet.http.HttpServlet;
import javax.transaction.UserTransaction;
...
public class TransactionServlet extends HttpServlet {
    @Resource UserTransaction transaction;
    @Inject ServletContext context;
    ...
}

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