JBoss 系列七十:一个简单的 CDI Web 应用
概述
本文通过一个简单的 CDI Web 应用演示dependency injection, scope, qualifiers 以及EL整合。应用部署完成后我们可以通过http://localhost:8080/moodchecker 来访问Web 应用欢迎页面,Mood在good和bad之间不停变化。通过本文,我们可以明白how qualifiers influence the selection of an injector。
编译部署测试应用
本应用源代码位于 https://github.com/kylinsoong/webframework/tree/master/cdi/moodchecker。
我们可以使用软件安装及资料下载中描述的方法下载,编译生成部署包cdi-moodchecker.war,使用使用4种方式部署应用到JBoss7/WildFly中描述的方法部署cdi-moodchecker.war到JBoss节点。应用部署完成启动JBoss 7如下:
./standalone.sh
应用部署完成后我们可以通过
http://localhost:8080/moodchecker 访问,Web页面显示如下:
示例分析
示例涉及到的配置文件或java类包括:
- beans.xml
- faces-config.xml
- index.xhtml
- web.xml
- jboss-web.xml
- org.jboss.demo.cdi.moodchecker.Mood
- org.jboss.demo.cdi.moodchecker.BadMood
- org.jboss.demo.cdi.moodchecker.GoodMood
- org.jboss.demo.cdi.moodchecker.MoodChecker
Mood
Mood类内容如下:
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named; @Named
@RequestScoped
public class Mood { private String mood; @Inject
@Good
private MoodChecker moodChecker; public Mood() { } public void check() {
mood = moodChecker.checkMood();
} public String getMood() {
return mood;
}
}
注意:@Named 和 @RequestScoped标注类本身,MoodChecker属性使用@Inject和@Good注入。
Qualifiers
注意前面Good是我们自定义的标注,用来注入GoodMood,我们这里创建了两个标注,Good和Bad,如下:
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target; import javax.inject.Qualifier; import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME; @Qualifier
@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
public @interface Good { }
我们使用
Good标注GoodMood,如下所示:
@Good
public class GoodMood implements MoodChecker { public String checkMood() {
return "I feel great !";
} }
这样当在
Mood中使用@Good标注时会注入GoodMood。
EL整合
index.xhtml使用EL表达式与后台Bean Mood直接交互,index.xhtml内容如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"> <h:head>
<title>How Are You Today?</title>
</h:head>
<h:body>
<h3>How Are You?</h3>
<h:form>
<p>
<h:commandButton value="Check Mood" action="#{mood.check}" />
</p>
<p>
<h:outputText value="#{mood.mood}" />
</p> </h:form>
</h:body> </html>
JBoss 系列七十:一个简单的 CDI Web 应用的更多相关文章
- 用Qt写软件系列三:一个简单的系统工具(上)
导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...
- [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)
[0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...
- 一个简单的Java web服务器实现
前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...
- Golang学习-第二篇 搭建一个简单的Go Web服务器
序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...
- SharePoint创建一个简单的Visio Web部件图
SharePoint创建一个简单的Visio Web部件图 Visio有很多强大的Mash-up混聚功能,使它能够轻松集成到SharePoint 2010中. 1. 打开Visio 2010,创建新的 ...
- 使用eclipse创建一个简单的Java Web应用程序
关于Java JDK/JRE.Tomcat的配置等等都没什么好说的,主要记录一下使用Eclipse创建web工程时的一些点以及说一说自己用IDEA的创建失败的过程(IDEA没运行成功...暂时不想弄了 ...
- JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例
什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...
- VS Extension+NVelocity系列(一)——构建一个简单的NVelocity解析环境
一.前言 本节我们将实际实现一个简单的NVelocity解析环境,以便为以后的实例做一些基本工作,虽然NVelocity如何使用已经属于老掉牙的话题,但我只能专门挑出来一章来做铺垫.人生就是这样无奈啊 ...
- ADF_General JSF系列1_创建一个简单的JSF Application
2015-02-17 Creatd By BaoXinjian
随机推荐
- S3C6410嵌入式应用平台构建(三)
构建了好久的系统,由于工作原因,没有及时写记录,目前我已经进展到构建yaffs2文件系统,启动Linux内核了.Uboot移植基本功能已经完成. 由于Uboot移植方法大致是一样的,我主要参考这位博友 ...
- inotify
inotify,文件系统控制函数,通知机制: ioctl, io控制函数
- .aspx.cs传值与取值
1:.aspx中post传值 $.post("ABP_ExchangeRatelz.aspx", { option: "isdelete", Ori_Curre ...
- GWT工程 —— HostedMode(宿主模式下调试) 所有的运行命令
Unknown argument: -helpGoogle Web Toolkit 1.7.0HostedMode [-noserver] [-port port-number | "aut ...
- spring拦截器的定义
(一).拦截器的定义 1.为什么需要拦截器:在做身份认证或者是进行日志的记录时,我们需要通过拦截器达到我们的目的 2.什么事拦截器:在AOP(Aspect-Oriented Programming)中 ...
- 简析TCP的三次握手与四次挥手
TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也 ...
- Java和JavaScript的时间互传
原创文章,转载请注明:Java和JavaScript的时间互传 By Lucio.Yang 1.从JavaScript到Java JavaScript: function query(){ var s ...
- mysql快速翻页查询方法
SELECT SQL_NO_CACHE *FROM softdb_testWHERE id > (SELECT idFROM softdb_testORDER BY id DESCLIMIT 5 ...
- R与数据分析旧笔记(六)多元线性分析 下
逐步回归 向前引入法:从一元回归开始,逐步加快变量,使指标值达到最优为止 向后剔除法:从全变量回归方程开始,逐步删去某个变量,使指标值达到最优为止 逐步筛选法:综合上述两种方法 多元线性回归的核心问题 ...
- php phalcon
1. 准备所需工具 1) php环境 浏览 2) phalcon插件 浏览 2. 安装phalcon 将php_phalcon.dll拷贝到%PHP_HOME%\ext目录中 修改php.ini文件, ...