Java EE 6已经发布了好久,不过国内使用的人依旧不多,资料也很缺少。我本身本人很看好JEE6,以为 JSR299- Contexts and Dependency Injection 很好很强大。CDI 也就是上下文依赖注入,概念和 Spring 中的 依赖注入(DI) 同样。在JEE6中被做为一个规范后,咱们使用起来就更加的方便实用了。html
CDI最给力的一点就是提供了一个 Extension接口, 容许咱们对CDI进行扩展。咱们能够经过实现这个接口来作实现不少很是酷的功能。包括对 Bean 的注入先后的拦截,Bean执行构造方法先后的拦截等等。经过这些咱们就能够实现事务,日志等等一些功能。前端
目前实现 JSR-299 CDI 规范的框架有三个: JBoss Weld , Apache OpenWebBeans 和 Caucho CanDI 。JSR-299 CDI 是 Gavin King 领导制定的,Weld 的实现也基本是由 JBoss的人员完成,因此JBoss社区比较活跃。java
CDI 做为一个依赖注入的规范,它的主要的优势有下面几点:web
就目前而言,CDI仍是很JSF结合使用的比较多,固然也有 Zk-CDI 等一些前端框架的扩展,也能够经过对CDI的扩展也能够实现相似于Spring-MVC 结合JSP使用。对于国内依然是Spring+JSP的天下,对于我这样一直在使用JSF的人来讲非常无奈。我本人一直以为JSF的开发效率要比JSP高,对于普通的开发人员只需掌握JSF便可,不过前提须要一个成熟的框架。国内不少java web开发者对JSF 都比较排斥,目前JSF已经2.2了,之前的许多问题都已经解决,在看看Primefaces, RechFaces 这些强大的控件库。我以为 JSF 已经值得咱们去学习使用了。apache
咱们开始搭建一个CDI的工程,下载 Eclipse3.7.2 ,而后安装对应的 JBossTools 插件,而后下载 JBoss-as-7.1.0.Final 。JBoss As里面已经集成了 JSF,Weld模块,因此使用Jboss做为服务器是十分方便的。
安全
建立一个 Dynamic Web Project 3.0 的工程,而后为工程添加 CDI 的支持。添加CDI的支持是为了可以在EL表达式中Eclipse能够有代码提示。这样咱们就搭建好了 Weld+JSF的工程,很方便吧 :-)
前端框架
编写Action代码:服务器
import javax.enterprise.context.RequestScoped; import javax.inject.Named; @Named @RequestScoped public class HelloCDIAction { public String getHelloWord(){ return "Hello Word"; } }
编写JSF页面代码:
<!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" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head></h:head> <body> <h:outputText value="#{helloCDIAction.helloWord}" /> </body> </html>
而后部署,访问 http://localhost:8080/CDIDemo/Main.face
后面会继续写一些有关 CDI 介绍的文章,结合JSF + Primefaces 给出一些 Demo。 app