Это руководство по методам CDI Disposer . В CDI, поскольку метод Producer генерирует объект, который затем может быть Disposer в приложение, метод Disposer используется для удаления объекта по завершении его работы. Метод Disposer всегда соответствует методу Producer .
Примером использования метода Disposer является случай, когда приложение использует соединение с базой данных. Поскольку соединение должно закрываться после завершения взаимодействия с базой данных, метод Disposer используется для удаления объекта, представляющего соединение.
Здесь мы покажем вам, как использовать метод Disposer . Мы создадим простой сервис. Затем мы создадим метод Producer для создания и внедрения службы в приложение и метод Disposer для очистки службы после ее завершения.
Нашей предпочтительной средой разработки является Eclipse . Мы используем версию Eclipse Juno (4.2) вместе с плагином Maven Integration версии 3.1.0. Вы можете скачать Eclipse отсюда и Maven Plugin для Eclipse отсюда . Установка плагина Maven для Eclipse выходит за рамки данного руководства и не будет обсуждаться. Tomcat 7 — это используемый сервер приложений.
Давайте начнем,
1. Создайте новый проект Maven
Перейдите в Файл -> Проект -> Maven -> Проект Maven.
На странице мастера «Выберите имя проекта и местоположение» убедитесь, что опция «Создать простой проект (пропустить выбор архетипа») не отмечена , нажмите «Далее», чтобы продолжить со значениями по умолчанию.
Здесь должен быть добавлен архетип maven для создания веб-приложения. Нажмите «Добавить архетип» и добавьте архетип. Установите переменную «Archetype Group Id» на "org.apache.maven.archetypes" , переменную «Archetype ardact Id» на "maven-archetype-webapp" и «Archetype Version» на "1.0" . Нажмите «ОК», чтобы продолжить.
На странице мастера «Введите идентификатор артефакта» вы можете определить имя и основной пакет вашего проекта. Установите для переменной «Group Id» значение "com.javacodegeeks.snippets.enterprise" а для переменной «Artifact Id» — "cdibeans" . Вышеупомянутые варианты составляют основной пакет проекта как "com.javacodegeeks.snippets.enterprise.cdibeans" а имя проекта — "cdibeans" . Установите для переменной «Package» значение "war" , чтобы создать файл war для развертывания на сервере tomcat. Нажмите «Готово», чтобы выйти из мастера и создать свой проект.
Структура проекта Maven показана ниже:
- Он состоит из следующих папок:
- Папка / src / main / java, которая содержит исходные файлы для динамического содержимого приложения,
- Папка / src / test / java содержит все исходные файлы для модульных тестов,
- Папка / src / main / resources содержит файлы конфигурации,
- Папка / target содержит скомпилированные и упакованные результаты,
- Папка / src / main / resources / webapp / WEB-INF содержит дескрипторы развертывания для веб-приложения,
- pom.xml — это файл объектной модели проекта (POM). Единственный файл, который содержит все связанные с проектом конфигурации.
2. Добавьте все необходимые зависимости
Вы можете добавить зависимости в файле Maven pom.xml , отредактировав его на странице «Pom.xml» редактора POM, как показано ниже:
pom.xml:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <modelVersion>4.0.0</modelVersion> <groupId>com.javacodegeeks.snippets.enterprise.cdi</groupId> <artifactId>cdibeans</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>cdibeans Maven Webapp</name> <dependencies> <dependency> <groupId>org.jboss.weld.servlet</groupId> <artifactId>weld-servlet</artifactId> <version>1.1.10.Final</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> <version>2.1.7</version> </dependency> </dependencies> <build> <finalName>cdibeans</finalName> </build></project> |
Как видите, Maven декларативно управляет библиотечными зависимостями. Создается локальный репозиторий (по умолчанию в папке {user_home} /. M2), и все необходимые библиотеки загружаются и помещаются туда из общедоступных репозиториев. Кроме того, внутрибиблиотечные зависимости автоматически разрешаются и обрабатываются.
3. Создать простой Сервис
Класс GreetingCard.java — это интерфейс с двумя методами.
GreetingCard.java
|
1
2
3
4
5
6
7
8
|
package com.javacodegeeks.snippets.enterprise.cdibeans;public interface GreetingCard { public void sayHello(); public void sayGoodBye();} |
Реализация сервиса показана ниже:
GreetingCardImpl.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
package com.javacodegeeks.snippets.enterprise.cdibeans.impl;import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard;public class GreetingCardImpl implements GreetingCard { public void sayHello() { System.out.println("Hello!!!"); } public void sayGoodBye() { System.out.println("GoodBye!!!"); }} |
4. Использование продюсера и диспозитора в управляемом бине
В управляемом компоненте ниже мы используем методы Producer и Disposer созданные выше. В частности, в классе GreetingCardFactory.java мы создаем метод getGreetingCard() , аннотированный аннотацией @Produces . Метод создает экземпляр GreetingCardImpl . Точно так же метод Disposer имеет аннотированный параметр @Disposes . Параметр Disposer получает объект, созданный методом источника. Метод Disposer вызывается автоматически, когда заканчивается контекст. Здесь, поскольку мы создали метод RequestScoped Producer метод Disposer вызывается в конце запроса.
GreetingCardFactory.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package com.javacodegeeks.snippets.enterprise.cdibeans;import java.io.Serializable;import javax.enterprise.context.RequestScoped;import javax.enterprise.inject.Disposes;import javax.enterprise.inject.Produces;import com.javacodegeeks.snippets.enterprise.cdibeans.impl.GreetingCardImpl;public class GreetingCardFactory implements Serializable { private static final long serialVersionUID = -44416514616012281L; @Produces @RequestScoped @Greetings public GreetingCard getGreetingCard() { GreetingCard greetingCard = new GreetingCardImpl(); greetingCard.sayHello(); return greetingCard; } public void disposeGreetingCard( @Disposes @Greetings GreetingCard greetingCard) { greetingCard.sayGoodBye(); }} |
Мы можем использовать квалификаторы для предоставления различных реализаций определенного типа бина. Квалификатор — это аннотация, которую мы применяем к бобу. Тип квалификатора — это аннотация Java, определенная как @Target({METHOD, FIELD, PARAMETER, TYPE}) и @Retention(RUNTIME) .
Здесь мы объявляем квалификатор @Greetings , как показано ниже:
Greetings.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
package com.javacodegeeks.snippets.enterprise.cdibeans;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.ElementType.TYPE;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.ElementType.PARAMETER;import static java.lang.annotation.RetentionPolicy.RUNTIME;import java.lang.annotation.Retention;import java.lang.annotation.Target;import javax.inject.Qualifier;@Qualifier@Retention(RUNTIME)@Target({ FIELD, TYPE, METHOD, PARAMETER })public @interface Greetings {} |
5. Запустите приложение
Чтобы запустить приложение, мы создали простой сервлет, как показано ниже:
GreetingServlet.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package com.javacodegeeks.snippets.enterprise.cdibeans.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.inject.Inject;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.javacodegeeks.snippets.enterprise.cdibeans.GreetingCard;import com.javacodegeeks.snippets.enterprise.cdibeans.Greetings;@WebServlet(name = "greetingServlet", urlPatterns = {"/sayHello"})public class GreetingServlet extends HttpServlet { private static final long serialVersionUID = 2280890757609124481L; @Inject @Greetings private GreetingCard greetingCard; public void init() throws ServletException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1>" + "Hello ... " + "</h1>"); System.out.println(" .... " + greetingCard.toString()); } public void destroy(){ }} |
Чтобы запустить пример, мы должны построить проект с Maven, а затем поместить файл war созданный в папке webbaps на tomcat. Тогда мы можем нажать на:
http://localhost/8080/cdibeans/sayHello
и результат показан ниже:
Это было руководство по методам диспетчера CDI Java EE.
Загрузите исходный код этого учебника: CDIDisposerMethodExample





