麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

使用 Jakarta Commons 之庫組件攻略

2019-11-18 13:16:22
字體:
來源:轉載
供稿:網友

  Jakarta Commons是Jakarta的一個子項目,目的是創建和維護獨立于其他框架和產品的程序包(packages)。這些程序包是一些服務于小范圍的有效組件的集合,通常適用于服務器端編程。
  
  Commons項目分為兩部分:Sandbox和Commons庫。Sandbox用于測試。本文關注庫組件,包括它們什么時候使用,在那里,以及用例子說明如何使用。
  
  簡要介紹
  Jakarta Commons項目源于重用,其中的程序包必須確保能夠重用。有一些包來自于其他項目,例如通用日志包是Jakarta Struts的一部分。當開發者發現某個包對于其他項目很有用,可以縮短開發周期,他們決定將這些包做成通用組件。這就是Jakarta Commons項目。
  
  要真正做到可重用,每個程序包必須獨立于其他較大的框架和項目。因此,Commons項目中的每個包在很大程度上是獨立的,不僅相對于其他項目,甚至對于其他包也是如此。違反這一原則的情況是存在的,但決大多數情況是使用成熟的APIs。例如,Betwixt包建立在xml APIs基礎之上。盡管這個項目的本意是建立不依靠其他組件的程序包。
  
  大多數程序包十分簡潔,以至于缺少必要的文檔、維護和幫助。有些包甚至只有錯誤的連接和極少的文檔。大多數情況下,你只能自己摸索如何使用它們,為什么使用它們。希望這篇文章對你有幫助。
  
  注重:Jakarta Commons與Apache Commons是不同的。后者是Apache Software Foundation(ASF)的頂級項目。而前者是ASF的另一個頂級項目Jakarta的子項目,是本文介紹的對象。而且,Jakarta Commons只使用java。在本文中Commons指的是Jakarta Commons。
  
  組件
  為了組織方便,我將18個(包括EL,Latka和Jexl)Commons組件分為五類。如下表:
  
  組件類別
  組件
  
  Web相關
  FileUpload,HTTPClient和Net
  
  XML相關
  Betwixt,Digester,Jelly和JXPath
  
  工具
  BeanUtils,Logging,DBCP,Pool和 Validator
  
  打包
  Codec 和 Modeler
  
  小程序
  CLI,Discovery,Lang和 Collections
  
  要注重的是這個分類只是對本文而言,在Commons項目中是不存在的。在某種程度上分類是重疊的。本文將介紹Web相關和小程序類,下篇文章包括XML相關和打包類,工具類在最后一篇文章中。
  
  小程序類
  將CLI,Discovery,Lang和 Collections歸入小程序類是因為它們都是為了一個小而實用的目的編寫的。
  
  1.CLI
  概要:CLI(Command Line Interface)為你的Java程序提供讀取和解析命令行參數的通用接口。
  在那得到:主頁,程序,源代碼。
  何時使用:需要統一操作命令行參數時。
  例子程序:CLIDemo.java,需要將commons-cli-1.0.jarcommons加入CLASSPATH中。
  描述:通常在完成一個Java程序時不得不重寫應用程序輸入參數的處理部分。假如有一個唯一的接口用來定義﹑解析和讀取輸入參數,以決定程序的運行方式不是很好嗎?CLI就是答案。
  對于CLI,命令行中每個要處理的參數都是一個Option。創建一個Options對象,將Option對象添加進去,然后用CLI提供的函數解析用戶的輸入參數。一個Option也許也需要用戶輸入一個值,例如文件名。這時Option必須在指定處創建。
  CLI使用步驟如下:
  1.創建Options:
  Options options = new Options();
  Options.addOption(“t”,false,”current time”);
  
  2.創建解析器解析用戶輸入:
  
      CommandLineParser parser = new BasicParser();
        CommandLine cmd;
        try{
             cmd = parser.parse(options, args);
           } catch(ParseException pe) {
             usage(options);
             return;
         }
  
     3.根據用戶輸入執行相應操作:
  
         if(cmd.hasOption(“n”)) {
             System.err.PRintln(“Nice to meet you: ”+  cmd.getOptionvalue(‘n’));
  }
  
  以上基本就是使用CLI的全過程。當然,CLI提供其他高級選項用于控制各種格式和解析器,但基本操作是相同的。完整的例子可以看demo。
  
  2.Discovery
  
  概要:discovery模式的實現,提供定位與實例化類或其他資源的通用方法。
  在那得到:主頁,程序,源代碼。該包處于pre-release狀態。
  何時使用:需要快速找到你的代碼中Java接口的實現時。
  例子程序:DiscoveryDemo.java,MyInterface.java,MyImpl1.java,MyImpl2.java, MyInterface。需要將commons-discovery.jar和commons-logging.jar添到CLASSPATH中。
  
  描述:Discovery的目的是使用最好的算法得到接口的所有實現。當用戶想找到所有的提供某一服務的提供商時,這將非凡有用。
  
  假設你寫了一個針對某一難題的接口。這個接口的所有實現將以唯一的編碼方式解決這一難題。真正的用戶在實際解決這一難題時將會有多種選擇。他怎么才能知道接口的那種實現在他的系統中是可行的?
  
  這就是Service與Service Provider結構。Service就是你定義的接口。Service Providers提供Service的實現。用戶需要選擇Service Providers。Discovery組件用多種方法提供幫助。注重Discovery不僅用于發現實現類,而且可以尋找資源,例如圖像或其他文件。它遵照Sun的Service Provider Architecture規范。
  
  同樣,Discovery的使用也很簡單。例子程序中,MyImpl1和MyImpl2是MyInterface接口的實現。MyInterface文件必須在META-INF/services目錄下。注重這個文件必須對應接口的全路徑。假如接口在包內,那么文件名也要相應改動。
  
  1.取得ClassLoader:
  
  ClassLoaders loaders =
  
  ClassLoaders.getAppLoaders(MyInterface.class, getClass(), false);
  
  2.創建DiscoverClass用于查找實現類:
  
  DiscoverClass discover = new DiscoverClass(loaders);
  
  3.查找實現類:
  
  Class implClass = discover.find(MyInterface.class);
  
  System.err.println("Implementing Provider: " + implClass.getName());
  
  運行以上代碼(DiscoveryDemo.java)將得到MyInterface文件中注冊的類,如下所示。再次提醒,假如實現包含在一個包結構內,文件名必須做相應的修改。假如這個文件不在規定目錄下,或實現類不能實例化或定位,將拋出DiscoveryException異常,表明找不到MyInterface的實現。
  
  MyImpl2 # Implementation 2
  
  當然,這不是注冊實現的唯一方法,否則Discovery還有什么用!事實上,這是Discovery發現類的內部機制的最后一步。其他方法包括在系統屬性或用戶屬性中定義實現類的名字。例如,刪除META-INF/services目錄下的文件,按以下輸入運行demo,結果相同。這里系統屬性是接口名,而值是接口實現提供者。
  
  java -DMyInterface=MyImpl1 DiscoveryDemo
  
  Discovery也可用于創建(單例)服務提供者的實例并調用它們的函數。如下:
  
  ((MyInterface)discover.newInstance(MyInterface.class)).myMethod();
  
  注重此時我們并不知道那個服務提供者實現myMethod函數,我們也不關心。這個函數的實現取決于以何種方式運行以上代碼以及注冊的服務提供者。
  
  3.Lang
  
  概要:java.lang包的擴展,增加許多對String的操作。提供類C語言的枚舉。
  
  在那得到:主頁,程序,源代碼。這里介紹的是Lang1.0,翻譯本文時Lang2.0已經發布。
  
  何時使用:當對java.lang提供的默認實現感到厭煩,想更好的控制String的操作,數值函數以及系統屬性時,還有,想使用C語言風格的枚舉時。
  
  例子程序:LangDemo.java, Mortgage.java, OnTV.java。需要將commons-lang.jar加入CLASSPATH中。
  
  描述:這個包中提供的很多工具函數可以簡化Java程序員的工作。這些函數可以減少實現日常功能的編程量。非凡是StringUtils類,它提供比標準的java.lang.String包更強的操作字符串的功能。它們的使用十分簡單,只要用正確的參數調用一個靜態函數。例如,要將一句話變為以大寫開頭只要:
  
  StringUtils.capitalise("name");
  
  這個函數的輸出就象我們需要的“Name”。瀏覽StringUtils API的其他靜態函數,你可能會發現對你有用的。例子程序中使用了一些。
  
  另一個有趣的類是RandomStringUtils。這個類中的函數產生隨機字符串,這在生成隨機密碼時很有用。
  
  類NumberUtils提供數據操作的函數,包括最大最小值函數,以及將字符串轉換為數字的函數。NumberRange和CharRange分別處理數字與字符的范圍。
  
  Builder包中的類提供為類添加toString,hashCode,compareTo和equals函數的功能。也就是說,自己不需編碼就可以在類中添加高質量的toString,hashCode,compareTo和equals函數,只要使用Builder包中的函數就可以了。例如,用ToStringBuilder函數給類添加toString方法:
  
      public class Mortgage {
          private float rate;
          private int years;
          ....
          public String toString() {
                 return new ToSt

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人激情视频网 | 国产午夜亚洲精品理论片大丰影院 | 中文字幕免费播放 | 韩国草草影院 | 九九热久久免费视频 | 亚洲午夜不卡 | 91 久久| 久久久精品视频免费看 | 性生活香蕉视频 | av在线收看 | 久久久久9999 | 国产乱淫av片免费观看 | 一级黄色毛片a | 久久久成人精品视频 | 久久综合艹 | 久久久久电影网站 | 成人国产精品一区二区毛片在线 | 欧美wwwsss9999| 国产精品视频一区二区三区四区五区 | 一级电影在线免费观看 | 中文字幕精品久久 | bt 自拍 另类 综合 欧美 | 爱爱插插视频 | 精品国产一区二区在线 | 久章草在线视频 | 成人在线观看一区二区 | 欧美a级在线免费观看 | 国产一级淫片在线观看 | 久久精品影视 | 久久99精品久久 | av7777777 | 国产精品久久久久久久久粉嫩 | 久久久久久久亚洲精品 | 在线看免费观看av | 又黄又爽免费无遮挡在线观看 | 日本娇小videos高潮 | 他也色在线视频 | 毛片免费视频网站 | 国产自在线 | 久色精品 | 久久露脸国语精品国产91 |