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

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

Использование стереотипов в приложениях CDI

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

  • Область видимости по умолчанию

  • Ноль или более Interceptor-ов

  • По желанию, аннотация @Named, гарантирующая именование EL по умолчанию

  • Необязательно, аннотация @Alternative, указывающая, что все компоненты с этим стереотипом являются альтернативами

Бин, аннотированный определённым стереотипом, всегда будет использовать указанные аннотации, так что не нужно применять одни и те же аннотации ко многим бинам.

Например, можно создать стереотип с именем Action, используя аннотацию javax.enterprise.inject.Stereotype:

@RequestScoped
@Secure
@Transactional
@Named
@Stereotype
@Target(TYPE)
@Retention(RUNTIME)
public @interface Action {}

Все аннотированные бины @Action будут иметь область видимости запроса, использовать именование EL по умолчанию и иметь привязки Interceptor-ов @Transactional и @Secure.

Вы также можете создать стереотип с именем Mock:

@Alternative
@Stereotype
@Target(TYPE)
@Retention(RUNTIME)
public @interface Mock {}

Все бины с этой аннотацией являются альтернативами.

Можно применить несколько стереотипов к одному и тому же компоненту, поэтому компонент может быть аннотирован следующим образом:

@Action
@Mock
public class MockLoginAction extends LoginAction { ... }

Также возможно переопределить область видимости, указанную стереотипом, просто указав другую область видимости для компонента. В следующем объявлении вместо области видимости запроса указывается область видимости сессии компонента MockLoginAction:

@SessionScoped
@Action
@Mock
public class MockLoginAction extends LoginAction { ... }

CDI предоставляет предустановленный стереотип Model, предназначенный для использования с бинами, определяющими уровень модели в прикладной архитектуре модель-представление-контроллер. Этот стереотип указывает, что бин является @Named и @RequestScoped:

@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface Model {}

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