java ee cdi

这是CDI Disposer方法的教程。 在CDI中,由于Producer方法生成的对象随后可以注入到应用程序中,因此使用Disposer方法,以便在其工作完成时将其删除。 Disposer方法始终与Producer方法匹配。

Disposer方法使用的一个示例是当应用程序使用与数据库的连接时。 由于必须在与数据库的接口完成后关闭连接,因此使用Disposer方法删除表示连接的对象。

在这里,我们将向您展示如何使用Disposer方法。 我们将创建一个简单的服务。 然后,一旦结束,我们将创建一个Producer方法以在应用程序中生成和注入服务,并创建一个Disposer方法以清理该服务。

我们首选的开发环境是Eclipse 。 我们正在使用Eclipse Juno(4.2)版本以及Maven Integration插件版本3.1.0。 您可以从Eclipse的这里从和Maven Eclipse插件这里 。 用于Eclipse的Maven插件的安装不在本教程的讨论范围之内,因此不再讨论。 Tomcat 7是使用的应用程序服务器。

让我们开始,

1.创建一个新的Maven项目

转到文件->项目-> Maven-> Maven项目。

在向导的“选择项目名称和位置”页面中,确保未选中 “创建简单项目(跳过原型选择)”选项,单击“下一步”以继续使用默认值。

在这里,必须添加用于创建Web应用程序的Maven原型。 单击“添加原型”并添加原型。 将“ Archetype组ID”变量设置为"org.apache.maven.archetypes" ,将“ Archetype构件ID”变量设置为"maven-archetype-webapp" ,将“ Archetype版本”设置为"1.0" 。 点击“确定”继续。

在向导的“输入工件ID”页面中,您可以定义项目的名称和主程序包。 将“组ID”变量设置为"com.javacodegeeks.snippets.enterprise" ,将“工件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文件夹包含Web应用程序的部署描述符,
  • pom.xml是项目对象模型(POM)文件。 包含所有项目相关配置的单个文件。

2.添加所有必要的依赖项

通过在POM编辑器的“ Pom.xml”页面上对其进行编辑,可以在Maven的pom.xml文件中添加依赖项,如下所示:

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><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><url>http://maven.apache.org</url><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

package com.javacodegeeks.snippets.enterprise.cdibeans;public interface GreetingCard {public void sayHello();public void sayGoodBye();
}

该服务的实现如下所示:

GreetingCardImpl.java

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.在托管Bean中使用生产者和处置者

在下面的托管bean中,我们利用了上面创建的ProducerDisposer方法。 特别是,在GreetingCardFactory.java类中,我们创建了一个方法方法getGreetingCard() ,该方法使用@Produces注释进行注释。 该方法创建GreetingCardImpl的实例。 以相同的方式,该Disposer方法具有一个带注释@Disposes参数。 Disposer参数接收由生产者方法产生的对象。 当上下文结束时,将自动调用Disposer方法。 在这里,由于我们已经创建了RequestScoped Producer方法,因此在请求结束时将调用Disposer方法。

GreetingCardFactory.java

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@Greetingspublic GreetingCard getGreetingCard() {GreetingCard greetingCard = new GreetingCardImpl();greetingCard.sayHello();return greetingCard;}public void disposeGreetingCard(@Disposes @Greetings GreetingCard greetingCard) {greetingCard.sayGoodBye();}}

我们可以使用限定符来提供特定bean类型的各种实现。 限定词是我们应用于Bean的注释。 限定符类型是Java批注,定义为@Target({METHOD, FIELD, PARAMETER, TYPE})@Retention(RUNTIME)

在这里,我们声明一个@Greetings限定词,如下所示:

Greetings.java

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.运行应用程序

为了运行该应用程序,我们创建了一个简单的servlet,如下所示:

GreetingServlet.java

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@Greetingsprivate 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文件放置在tomcat的webbaps文件夹中。 然后,我们可以继续:

http://localhost/8080/cdibeans/sayHello

结果是如下所示:

这是Java EE CDI Disposer方法的教程。 下载本教程的源代码: CDIDisposerMethodExample

翻译自: https://www.javacodegeeks.com/2013/05/java-ee-cdi-disposer-methods-example.html

java ee cdi

java ee cdi_Java EE CDI处理程序方法示例相关推荐

  1. Java EE CDI处理程序方法示例

    这是CDI Disposer方法的教程. 在CDI中,由于Producer方法生成的对象随后可以注入到应用程序中,因此使用Disposer方法,以便在其工作完成时将其删除. Disposer方法始终与 ...

  2. java ee cdi_Java EE CDI依赖关系消歧示例

    java ee cdi 在本教程中,我们将向您展示如何避免CDI bean中的依赖关系消除歧义. 在CDI中,我们可以为应用程序中不同客户端的接口的多个实现实现依赖项注入. 依赖性消除歧义的问题是客户 ...

  3. java ee cdi_Java EE CDI Producer方法教程

    java ee cdi 这是CDI Producer方法的教程. 在CDI中,生产者方法生成一个对象,然后可以将其注入. 当我们要注入本身不是bean的对象,要注入的对象的具体类型在运行时可能有所不同 ...

  4. java ee cdi_Java EE CDI程序化依赖关系消歧示例–注入点检查

    java ee cdi 在本教程中,我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义. 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关 ...

  5. java ee cdi_Java EE CDI ConversationScoped示例

    java ee cdi 在本教程中,我们将向您展示如何在Web应用程序中创建和使用ConversationScoped Bean. 在CDI中,bean是定义应用程序状态和/或逻辑的上下文对象的源. ...

  6. java ee cdi_Java EE CDI依赖注入(@Inject)教程

    java ee cdi 在本教程中,我们将向您展示如何在CDI管理的Bean中实现依赖注入. 特别是,我们将利用CDI API提供的@Inject批注将CDI bean注入另一个bean. 通过这种方 ...

  7. java ee cdi_Java EE CDI限定词:快速浏览

    java ee cdi 在上下文和依赖注入(CDI)中, 限定符是类型安全和松散耦合的主体. 为什么? 没有CDI,我们将以类似于下面的方式注入Java EE组件 注意:这实际上不会编译,只是假设的代 ...

  8. java ee cdi_Java EE CDI bean范围

    java ee cdi Java EE平台的上下文和依赖注入(CDI)是一项功能,有助于将Java EE平台的Web层和事务层绑定在一起. CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web ...

  9. java ee cdi_Java EE6 CDI,命名组件和限定符

    java ee cdi Java EE6的最大承诺之一就是简化了依赖注入的使用. 他们做到了,使用CDI . CDI代表Java EE的上下文和依赖注入,它提供了一个基础集,用于在企业应用程序中应用依 ...

最新文章

  1. [leetcode] 367. Valid Perfect Square
  2. duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性
  3. 笔算除法 c语言,《两、三位数除以一位数,笔算》
  4. eltable刷新整个表格方法_利用SSAS实现PBI报表增量刷新
  5. mysql整除、取余、四舍五入
  6. JavaScript常用设计模式
  7. jquery详细基础教程
  8. 测试工程师必备小工具指南
  9. 贝叶斯网络(概率图模型)
  10. 华为认证hcia含金量_华为HCIA认证含金量如何?
  11. python爬虫爬取视频时,实现实时进度条显示
  12. SPSS 检验后显著性识别
  13. Unity3D角色换装及换装编辑器
  14. vue swiper click失效
  15. 数据结构与算法 入门 与 排序
  16. android+仿友盟更新,android友盟增量更新
  17. quartus ii 13.0下载地址
  18. Unity笔记之Unity读取/写入Excel
  19. 机器学习 —— 支持向量机
  20. ul 原点显示_li前面的原点或者方的样式修改html中列表项li所显示的圆点的颜色?,以及相关样式的设定...

热门文章

  1. LVS三种模式的区别及负载均衡算法
  2. jsp页面中JSTL/EL标签引用java后台静态static字段的方法总结
  3. 在Tomcat配置JNDI数据源的三种方式
  4. 阿里巴巴对Java编程【命名风格】的规约
  5. hql投影查询之—— [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice
  6. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
  7. String常用的方法总结
  8. c语言程序设计的一般错误的是,《C语言程序设计》第十章 程序常见错误分析.pdf...
  9. linux 文档操作,Linux学习之文档操作
  10. Java的不同进制输出,[DanoR][Java小码][进制转换::将double转换为不同进制后用String输出]...