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

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

Пример decorators: декорирование бинов

Пример decorators является ещё одним вариантом примера encoder и показывает, как использовать декоратор для реализации дополнительной бизнес-логики для компонента.

Исходные файлы находятся в каталоге tut-install/examples/cdi/decorators/src/main/java/javaeetutorial/decorators/.

Здесь рассматриваются следующие темы:

Обзор decorators

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

Пример включает в себя интерфейс, его реализацию, декоратор, Interceptor, Managed-бин, страницу Facelets и файлы конфигурации.

Компоненты decorators

Пример decorators очень похож на пример encoder, описанный в Пример encoder: использование альтернатив. Однако вместо предоставления двух реализаций интерфейса Coder этот пример предоставляет только класс CoderImpl. Класс декоратора CoderDecorator вместо простого возврата кодированной строки отображает значения и длину входных и выходных строк.

Класс CoderDecorator, например CoderImpl, реализует бизнес-метод интерфейса Coder, codeString:

@Decorator
public abstract class CoderDecorator implements Coder {

    @Inject
    @Delegate
    @Any
    Coder coder;

    public String codeString(String s, int tval) {
        int len = s.length();

        return "\"" + s + "\" becomes " + "\"" + coder.codeString(s, tval)
                + "\", " + len + " characters in length";
    }
}

Метод codeString декоратора вызывает метод codeString объекта делегата для выполнения фактического кодирования.

Пример decorators включает в себя привязку Interceptor-а Logged и класс LoggedInterceptor из примера billpayment. В этом примере Interceptor устанавливается для метода CoderBean.encodeString и метода CoderImpl.codeString. Код Interceptor-а не изменяется. Interceptor-ы, как правило, повторно используемы для различных приложений.

За исключением аннотаций Interceptor-ов, классы CoderBean и CoderImpl идентичны версиям в примере encoder.

Файл beans.xml определяет как декоратор, так и Interceptor:

    <decorators>
        <class>javaeetutorial.decorators.CoderDecorator</class>
    </decorators>
    <interceptors>
        <class>javaeetutorial.decorators.LoggedInterceptor</class>
    </interceptors>

Запуск decorators

Вы можете использовать IDE NetBeans или Maven для сборки, упаковки, развёртывания и запуска приложения decorators.

Здесь рассматриваются следующие темы:

Пример сборки, упаковки и развёртывания decorators с IDE NetBeans

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В меню «Файл» выберите «Открыть проект».

  3. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/cdi
  4. Выберите каталог decorators.

  5. Нажмите Открыть проект.

  6. На вкладке «Проекты» кликните правой кнопкой мыши проект decorators и выберите «Сборка».

    Эта команда собирает и упаковывает приложение в WAR-файл decorators.war, расположенный в каталоге target, а затем развёртывает его на сервере GlassFish.

Пример сборки, упаковки и развёртывания decorators с использованием Maven

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В окне терминала перейдите в:

    tut-install/examples/cdi/decorators/
  3. Введите следующую команду для развёртывания приложения:

    mvn install

    Эта команда собирает и упаковывает приложение в WAR-файл decorators.war, расположенный в каталоге target, а затем развёртывает его на сервере GlassFish.

Запуск decorators

  1. В веб-браузере введите следующий URL:

    http://localhost:8080/decorators
  2. На странице Decorated String Encoder введите строку и количество букв для сдвига, а затем нажмите Encode.

    Вывод метода декоратора отображается синим цветом в строке результатов. Например, если вы ввели Java и 4, вы увидите следующее:

    "Java" becomes "Neze", 4 characters in length
  3. Проверьте вывод журнала сервера.

    В IDE NetBeans выходные данные отображаются на вкладке «Вывод сервера GlassFish». В противном случае просмотрите domain-dir`/logs/server.log`.

    Вывод от Interceptor-ов появляется:

    INFO: Entering method: encodeString in class javaeetutorial.decorators.CoderBean
    INFO: Entering method: codeString in class javaeetutorial.decorators.CoderImpl

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