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