成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java EE 6簡化開發總結:注解支持與Profile

原創
開發 后端
Java EE的最新版本,Java EE 6同時強調了簡單性和易用性,進一步簡化了平臺,擴展了可用性。在簡化開發這方面,Java EE 6讓更多類型的Java EE組件可以用注解來控制,并引入了Profile的概念。本文對這方面進行了介紹,并對Java EE 6平臺進行了總結。

【51CTO精選譯文】在51CTO之前的一系列Java EE 6的文章中,已經介紹了諸如CDIBean驗證等新技術,以及Web分片Facelets,無接口視圖,以及標準API等支持,通過這些特性可以更容易地開發企業或Web應用程序。此外,Java EE 6平臺許多地方的安全性也得到了極大的增強,特別是注解現在可以用在更多類型的Java EE組件中了,用于依賴性注入的注解現在也標準化了,使可注入類具有更好的跨框架遷移特性。

注解支持更多類型的Java EE組件

Java EE 5引入了最簡單的基于注解的編程模型,在新版本中得到了擴展,可以支持更多類型的Java EE組件,如Servlet和JSF組件。例如,在Web應用程序中再也不用部署描述符定義Servlet了,你需要做的就是使用@WebServlet注解標記一個類,如:

  1. @WebServlet(name="CalculatorServlet", urlPatterns={"/calc""/getVal"})  
  2.    public class CalculatorServlet extends HttpServlet{  
  3.       public void doGet(HttpServletRequest req, HttpServletResponse res) {  
  4.       ...  
  5.       }  
  6.  
  7.       ...  
  8.    }  
  9.  

@WebServlet注解是Servlet 3.0提供的注解之一,下面是Servlet 3.0中提供的其它注解:

@WebFilter:在Web應用程序中定義Servlet過濾器;

@WebInitParam:指定所有必須傳給Servlet或Servlet過濾器的init參數;

@WebListener:注解一個監聽器,在特定Web應用程序上下文中獲得各種不同操作事件;

@MultipartConfig:在一個Servlet上指定時,表示Servlet的MIME類型是multipart/*。

JSF 2.0中注解支持的一個好處是簡化了配置托管Bean的方法,不再需要在JSF配置文件faces-config.xml中通過配置注冊一個托管Bean,現在你只需要使用@ManagedBean注解標記托管Bean,并使用RequestScope注解設置其范圍即可,如:

  1. import javax.faces.bean.ManagedBean;  
  2.    import javax.faces.bean.RequestScoped;  
  3.  
  4.    @ManagedBean(name="userBean")  
  5.    @RequestScoped 
  6.    public class UserBean {  
  7.  
  8.       private String name;  
  9.  
  10.       public String getName() {  
  11.    return name;  
  12.       }  
  13.       public void setName(String name) {  
  14.    this.name = name;  
  15.       }  
  16.       public UserBean() {}  
  17.    }  
  18.  

JSF 2.0還提供了其它一些注解,如:

@ManagedProperty:將Bean的屬性標記為托管屬性;

@ResourceDependency:聲明組件將要使用的資源;

@ListenFor:允許組件將特定事件作為一個監聽器訂閱到組件;

@FacesConverter:將類注冊為一個Converter,也就是說,這個類可以執行Object到String,和String到Object的轉換;

@FacesValidator:將類注冊為一個Validator,也就是說,這個類可以執行驗證。

#t#如果你想讓一個注解得到處理,無論是Servlet 3.0注解還是JSF 2.0注解,你需要將使用這些注解標記的類放到Web應用程序的WEB-INF/classes目錄下,也可以將這些類打包到一個jar文件,然后放到程序的WEB-INF/lib目錄下。

Web分片的例子中,我們在web.xml文件中使用<metadata-complete>元素通知Web容器是否要尋找注解,如果你將<metadata-complete>設為false,或者在文件中不指定<metadata-complete>元素,那么在部署期間,容器必須掃描注解和Web分片,為Web應用程序構建有效的元數據。如果將<metadata-complete>設為true,將由部署描述符為Web應用程序提供所有的配置信息。在這個例子中,Web容器不會搜索注解和Web分片。

隨著對注解和新方法ServletContext的支持,web.xml對Servlet 3.0來說顯得可有可無,也就是說,在應用程序war文件中不再需要包括一個web.xml文件。

#p#

標準化的依賴注入注解

依賴注入是開發企業Java應用程序的一種流行技術,在依賴注入中,也叫做反轉控制,一個組件指定它依賴的資源,一個注入器通常是一個容器,它為組件提供資源,雖然依賴注入有多種實現方式,但許多開發人員習慣使用注解來實現它。依賴注入在Java開發框架中得到了廣泛使用,如Spring和Guice。遺憾的是,之前還沒有基于注解構建依賴注入的標準方法,特別需要注意的是,Sping框架采用的基于注解的依賴注入方法與Guice采用的方法不一樣。

隨著Java EE 6的發布,這個問題得到了解決,隨Java EE 6發布的JSR 330:Java依賴注入改變了這種境況,這個規范的目標是為依賴注入提供一個標準的,可擴展的API。

API由一套用在可注入類上的注解組成,這些注解包括:

@Inject:標識可注入的構造器,方法和字段;

@Qualifier:標識合法的注解,合法的是強類型鍵,它可以幫助區分相同類型的對象不同使用方法。例如,@Red Car和@Blue Car可以理解為相同類型的不同實例,在這個例子中,@Red和@Blue是合法的;

@Scope:標識注解范圍;

@Singleton:標識注入器只實例化一次的類型。

例如,下面的類Stopwatch使用@Inject注解在TimeSource類上注入一個依賴;

  1. class Stopwatch {  
  2.       final TimeSource timeSource;  
  3.       @Inject Stopwatch(TimeSource TimeSource) {  
  4.         this.TimeSource = TimeSource;  
  5.       }  
  6.       void start() { ... }  
  7.       long stop() { ... }  
  8.    }  
  9.  

依賴注入可以通過其它注入進行擴展,例如,假設你想創建一個StopwatchWidget類,它在Stopwatch類上有一個依賴,那么你可以象下面這樣定義這個類:

  1. class StopwatchWidget {  
  2.       @Inject StopwatchWidget(Stopwatch sw) { ... }  
  3.       ...  
  4.    }  
  5.  

#t#在響應中,注入器發現一個TimeSource對象,使用TimeSource對象構造一個Stopwatch對象,然后再使用Stopwatch對象構造一個StopwatchWidget對象。

JSR 330制定的標準化注解使可注入類可以跨框架遷移,你不用再為特定廠商的注解忙碌了。

注意在JSR 330上構建的CDI和向依賴注入增加的新功能,包括自動發現,可注入類的配置,在運行時定義新的可注入類的API,幫助與第三方框架集成。(51CTO編輯注:針對Java EE 6當中的JSR 330依賴注入,JCP成員們當中是存在一些爭議的,具體可參考這篇JSR 330通過時各方爭議的總結文章

#p#

Profile(配置文件)和裁剪

Java EE 6引入了Profile的概念,它減小了Java EE平臺的大小,Profiles是Java EE平臺的配置,一個Profile可能包括Java EE平臺技術的一個子集,其它技術則通過JCP取得,但JCP并不是Java EE平臺的一部分。例如,假設有一個電話系統的Profile,這個Profile可能包括了Java EE Web層技術,如Servlet和JSP,EJB企業組件模塊和持久化JPA,它也可能包含面向電話的技術,如JSR 289:SIP Servlet 1.1,雖然這個規范已經經歷了JCP過程,但還不是Java EE平臺的一部分。

Profile是由JCP社區進程定義的。此外,Java EE 6規范為在Java EE Profiles中引用Java EE平臺技術定義了規則,Java EE 6也強調了一個原則,那就是創建一個Profile得有充分的理由,規范是這樣描述的“創建一個Profile的決定應該考慮它潛在的缺點,特別是分片和開發人員混淆方面,通常,只有當開發人員都支持,并且都理解了應用程序可以因此而得到哪些好處時,才需要創建一個Profile”。

Profile有意獨立于Java EE 6平臺發展,Profile是通過Java規范請求(Java Specification Request,JSR)提交的,但是按它自己的節奏發布的,它與Java EE平臺的版本并沒有保持完整的一致性,也就是說諸如前面虛構的電話系統Profile可以按其行業發展情況自由發展,不與Java EE平臺或其它Profile綁定,但需要注意,最好定期讓Profile與平臺同步,特別是平臺的一個主要版本發布時應該同步。目標是維持一個公共的編程模型,簡化開發人員跨整個Java EE 6產品家族的學習過程。(51CTO編輯注:在Java EE 6最終通過的投票上,JCP成員仍存有爭議,其中之一就是針對Profile這個概念。比如說,SpringSource的Rod Johnson認為Profile的引入過于倉促,帶入了很多未經證實的技術。)

Web Profile

Java EE 6定義的第一個Profile叫做Web Profile,它提供了一個Java EE平臺的子集,其設計目的主要是用于Web開發,Web Profile只包括大部分開發人員需要的那些技術。

下表列出了完整的Java EE 6平臺技術,Web Profile使用的技術全部打上勾了。

Java EE平臺技術
Web Profile
Web應用程序技術
JSR 315: Java Servlet 3.0
JSR 314: JavaServer Faces (JSF) 2.0
JSR 245: JavaServer Pages 2.2 and Expression Language (EL) 1.2
JSR 52: A Standard Tag Library for JavaServer Pages 1.2
JSR-45: Debugging Support for Other Languages 1.0
企業應用程序技術
JSR 299: Contexts and Dependency Injection for the Java EE Platform 1.0
JSR 330: Dependency Injection for Java
JSR 318: Enterprise JavaBeans 3.1
JSR 317: Java Persistence API 2.0
✓(EJB Lite)
JSR 250: Common Annotations for the Java Platform 1.1
JSR 907: Java Transaction API (JTA) 1.1
JSR 303: Bean Validation 1.0
JSR 322: Java EE Connector Architecture 1.6
JSR 914: Java Message Service (JMS) API 1.1
JSR 919: JavaMail 1.4
Web Service技術
JSR 311: JAX-RS: The Java API for RESTful Web Services 1.1
JSR 109: Implementing Enterprise Web Services 1.3
JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.2
JSR 222: Java Architecture for XML Binding (JAXB) 2.2
JSR 181: Web Services Metadata for the Java Platform
JSR 101: Java APIs for XML based RPC 1.1
JSR 67: Java APIs for XML Messaging 1.3
JSR 93: Java API for XML Registries 1.0 (JAXR) 1.0
管理和安全技術
JSR 196: Java Authentication Service Provider Interface for Containers 1.0
JSR 115: Java Authorization Contract for Containers 1.3
JSR 88: Java EE Application Deployment 1.2
JSR 77: J2EE Management 1.1

注意,Web Profile包括一個Servlet容器和所有傳統的展示技術,如JSP,JSF和JSP的標準Tag庫,EJB 3.1輕量級版是一個組件模型,也包括持久化JPA和事務管理JTA,還有Web分片,你可以使用傳統的框架或庫(如JAX-RS)輕松地擴展Web Profile。

裁減(Pruning)

Java EE 6平臺中引入的另一個可以減小平臺大小的技術是裁減,裁減一種技術意味著這種技術在下一個平臺版本中,它可能成為一個可選組件,而不是一個必備組件,最終由社區進行決策。裁減可以減小Java EE平臺產品的大小,因為Java EE應用程序廠商可能會在其實現中包括被裁減的技術,也可能排除被裁減的技術,如果包括被裁減計劃的話,必須要提供兼容能力,保證現有應用程序可以繼續運行。

#t#下面這些技術都是即將被裁減的候選者:
◆JSR 101:基于XML的RPC Java API
◆JSR 93: XML注冊1.0 Java API (JAXR)
◆EJB實體Bean(定義為JSR 153:EJB 2.0或更早版本的一部分)
◆JSR 88: Java EE應用程序部署

小結

隨著對Profile的支持,大量新技術如JAX-RS,增強的擴展性功能,如Web分片和平臺級的注解,Java EE 6讓Java EE平臺更加靈活,更加強大,對于開發人員而言更加友好。連Hibernate之父Gavin King也推薦開發者們升級到Java EE 6,你為什么不下載Java EE 6 SDK,嘗試一個Java EE 6平臺下的實現呢?

原文:Further Ease of Development  作者:Ed Ort

責任編輯:yangsai 來源: 51CTO.com
相關推薦

2023-08-11 18:16:08

DevOps開發

2010-01-18 09:37:39

JSF 2.0Java EE 6

2010-05-27 12:30:52

MySQL工具

2020-11-10 08:54:55

Lombok

2011-08-12 08:40:39

PaaSOpenShiftJava EE 6

2009-10-28 12:39:33

Java EE無框架

2010-06-02 10:00:25

MySQL工具

2009-10-26 10:05:51

NetBeans 6.

2009-06-11 17:54:00

Visual StudDataSet

2010-05-24 09:47:32

AjaxAjax框架

2009-12-11 11:33:09

NetBeans 6.

2011-12-31 15:24:48

JavaJ2EE

2010-07-06 10:34:33

RationalJazz需求管理

2009-12-09 14:31:59

IntelliJ

2010-01-26 09:23:18

Java EE 6

2009-12-15 10:11:10

2010-03-22 09:33:18

Bean Valida

2009-10-20 09:25:17

Java EE 6最終

2016-06-16 09:56:17

Cloudera

2010-02-03 09:06:26

Java EE 6
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文成人在线 | 日日干日日操 | 性欧美hd | 国产一区二区三区www | 韩日在线视频 | 成人国产精品久久 | 国产精品18hdxxxⅹ在线 | 久久成人人人人精品欧 | 九九国产| 夜夜艹天天干 | 在线观看av网站永久 | 亚洲成人日韩 | 精品网| 久久综合九九 | 久久久久久久久久久久亚洲 | 另类专区成人 | 在线免费观看一区二区 | 欧美老妇交乱视频 | 天堂在线免费视频 | 日韩福利在线观看 | 99国产精品久久久久 | 噜噜噜噜狠狠狠7777视频 | 久久久九九 | 99久久国产综合精品麻豆 | 免费一区 | 亚洲一区不卡在线 | 欧美黑人体内she精在线观看 | 亚洲一区二区三区四区五区中文 | 国产精品69久久久久水密桃 | 国产成人久久av免费高清密臂 | 视频三区 | 成人在线视频一区二区三区 | 久久小视频 | 日本免费在线 | julia中文字幕久久一区二区 | 国产精品国产三级国产aⅴ浪潮 | 成人h动漫精品一区二区器材 | 91久久婷婷| 91视频导航 | 日韩一区二区三区在线观看 | 欧美日韩在线免费 |