spring-beans module依賴了一些jar包
第一個(gè)jar包
javax開(kāi)頭的都是javaee的包 java分Java SE、Java EE、Java ME
Java SE(Java Platform养交,Standard Edition)任洞。Java SE 以前稱為 J2SE叽躯。它允許開(kāi)發(fā)和部署在桌面、服務(wù)器着撩、嵌入式環(huán)境和實(shí)時(shí)環(huán)境中使用的 Java 應(yīng)用程序。Java SE 包含了支持 Java Web 服務(wù)開(kāi)發(fā)的類匾委,并為 Java Platform拖叙,Enterprise Edition(Java EE)提供基礎(chǔ)。
Java EE(Java Platform赂乐,Enterprise Edition)薯鳍。這個(gè)版本以前稱為 J2EE。企業(yè)版本幫助開(kāi)發(fā)和部署可移植挨措、健壯挖滤、可伸縮且安全的服務(wù)器端 Java 應(yīng)用程序崩溪。Java EE 是在 Java SE 的基礎(chǔ)上構(gòu)建的,它提供 Web 服務(wù)斩松、組件模型伶唯、管理和通信 API,可以用來(lái)實(shí)現(xiàn)企業(yè)級(jí)的面向服務(wù)體系結(jié)構(gòu)(service-oriented architecture惧盹,SOA)和 Web 2.0 應(yīng)用程序乳幸。
Java ME(Java Platform,Micro Edition)钧椰。這個(gè)版本以前稱為 J2ME粹断。Java ME 為在移動(dòng)設(shè)備和嵌入式設(shè)備(比如手機(jī)、PDA嫡霞、電視機(jī)頂盒和打印機(jī))上運(yùn)行的應(yīng)用程序提供一個(gè)健壯且靈活的環(huán)境姿染。Java ME 包括靈活的用戶界面、健壯的安全模型秒际、許多內(nèi)置的網(wǎng)絡(luò)協(xié)議以及對(duì)可以動(dòng)態(tài)下載的連網(wǎng)和離線應(yīng)用程序的豐富支持影兽。基于 Java ME 規(guī)范的應(yīng)用程序只需編寫一次浅悉,就可以用于許多設(shè)備胸嘴,而且可以利用每個(gè)設(shè)備的本機(jī)功能。
這個(gè)jar包主要提供了幾個(gè)注解和一個(gè)接口 比較簡(jiǎn)單
oracle的api地址:http://docs.oracle.com/javaee/7/api/javax/inject/package-summary.html
目前只能看到7版本的 是從版本5開(kāi)始加入的
其實(shí)spring自帶的注解@Autowired等價(jià)于@Inject寄锐、 @Qualifier等價(jià) @Named兵多、Spring自帶的@Qualifier的擴(kuò)展@Qualifier限定描述符注解情況等價(jià)于JSR-330的@Qualifier注解
以前的spring注解@Autowired注解需要寫到set方法上 不過(guò)現(xiàn)在改進(jìn)已不需要
而 @Inject 只需要寫到對(duì)應(yīng)的屬性定義上即可所以會(huì)出現(xiàn) javax.inject.jar
而spring的框架是支持這個(gè)的所以引入了 javax.inject.jar
為什么有了@Inject還需要@Qualifier,大家想啊如果一個(gè)接口有很多實(shí)現(xiàn)類 你注入接口的時(shí)候是不是得指定是哪個(gè)實(shí)現(xiàn)類啊橄仆,還有@Autowired為什么有時(shí)候不需要指定呢剩膘,因?yàn)橹挥幸粋€(gè)實(shí)現(xiàn)類 且spring默認(rèn)按name注入的 所以就沒(méi)問(wèn)題
java.el-api-2.25.jar
雖然在beans module中沒(méi)有使用到(我沒(méi)找到)但是其實(shí)是Java EE對(duì)el表達(dá)式的一種支持。
oracle文檔地址:http://docs.oracle.com/javaee/7/api/javax/el/package-summary.html
文檔第一句Provides the API for the Unified Expression Language 3.0 el表達(dá)式3.0的支持盆顾。el表達(dá)式主要用在jsp頁(yè)面中怠褐,獲取對(duì)象屬性之類的操作,其實(shí)就是一種語(yǔ)法 而這個(gè)jar包就是為該語(yǔ)法提供支持的您宪。
snakeyaml-1.15.jar
YAML是"YAML Ain't a Markup Language"(YAML不是一種置標(biāo)語(yǔ)言)的遞歸縮寫奈懒,早先YAML的意思其實(shí)是:"Yet Another Markup Language"(另外一種置標(biāo)語(yǔ)言),但為了強(qiáng)調(diào)這種語(yǔ)言以數(shù)據(jù)做為中心宪巨,而不是以置標(biāo)語(yǔ)言為重點(diǎn)磷杏,而用返璞詞重新命名,YAML的官方定義很簡(jiǎn)單捏卓,即一種人性化的數(shù)據(jù)格式定義語(yǔ)言极祸,其主要功能用途類似于XML或JSON,YAML使用空白字符和分行來(lái)分隔數(shù)據(jù),且巧妙避開(kāi)各種封閉符號(hào)遥金,如:引號(hào)峦椰、括號(hào)等,以避免這些符號(hào)在復(fù)雜層次結(jié)構(gòu)中變得難以辨認(rèn)汰规。YAML的語(yǔ)法與高階語(yǔ)言類似汤功,可以很簡(jiǎn)單地表述序列(java中的list)、雜湊表(java中的map)溜哮、標(biāo)量(java中的基本類型等)數(shù)據(jù)結(jié)構(gòu)滔金,它重點(diǎn)強(qiáng)調(diào)可閱讀性,其實(shí)JSON語(yǔ)法是YAML的子集,大部分的JSON文件都可以被YAML的剖析起剖析茂嗓。雖然大部分的數(shù)據(jù)分層形式也可以使用類似JSON的格式餐茵,不過(guò)YAML并不建議這樣使用,除非這樣編寫能讓文件可讀性增加述吸,更重要的是忿族,YAML的許多擴(kuò)展在JSON是找不到的,如:進(jìn)階資料形態(tài)蝌矛、關(guān)系錨點(diǎn)道批、字串不需要引號(hào)、映射資料形態(tài)會(huì)儲(chǔ)存鍵值的順序等入撒。
java對(duì)此語(yǔ)法文件的解析實(shí)現(xiàn)即為此jar包隆豹,.yaml文件解析。
SnakeYAML 網(wǎng)站 : http://snakeyamlrepo.appspot.com/
支持Unicode茅逮,包括UTF-8/UTF-16的輸入/輸出璃赡;
為序列化和反序列化本地的Java對(duì)象提供了高級(jí)API;
支持YAML類型庫(kù)中的所有類型献雅;
比較理性的錯(cuò)誤信息碉考。
SnakeYA要求Java 5或者更高版本。目前的穩(wěn)定版本是: 1.5挺身。
示例代碼:
Yaml yaml = new Yaml();String document = "\n- Hesperiidae\n- Papilionidae\n- Apatelodidae\n- Epiplemidae";List<String> list = (List<String>) yaml.load(document);System.out.println(list);
輸出結(jié)果:['Hesperiidae', 'Papilionidae', 'Apatelodidae', 'Epiplemidae']
junit-4.12.jar
junit 比較熟悉是做單元測(cè)試用的侯谁,斷言、測(cè)試異常瞒渠,捕獲異常良蒸,測(cè)試方法的性能的測(cè)試技扼。
mockito-core.jar
mock也是做測(cè)試目的用的伍玖,主要解決比較難以構(gòu)建的對(duì)象,是簡(jiǎn)單輕量級(jí)能夠替代EasyMock的框架剿吻。使用簡(jiǎn)單窍箍,測(cè)試代碼可讀性高。
源碼見(jiàn)github:https://github.com/mockito/mockito/blob/master/README.md
hamcrest-all-1.1.jar
hamcrest是輔助測(cè)試工具 ,junit中的斷言 就是使用的它椰棘,但是二者是不同的框架
地址:http://hamcrest.org/JavaHamcrest/
log4j.jar
這個(gè)是記錄日志用的
tomcat-embed-core.jar
這個(gè)jar包很神奇的可以不將項(xiàng)目copy到tomcat目錄下而實(shí)現(xiàn)基于tomcat環(huán)境的開(kāi)發(fā)
//設(shè)置工作目錄
String catalina_home = "C:/";
Tomcat tomcat = new Tomcat();
tomcat.setHostname("localhost");
tomcat.setPort(startPort);
//設(shè)置工作目錄,其實(shí)沒(méi)什么用,tomcat需要使用這個(gè)目錄進(jìn)行寫一些東西
tomcat.setBaseDir(catalina_home);
//設(shè)置程序的目錄信息
tomcat.getHost().setAppBase("e:/");
// Add AprLifecycleListener
StandardServer server = (StandardServer) tomcat.getServer();
AprLifecycleListener listener = new AprLifecycleListener();
server.addLifecycleListener(listener);
//注冊(cè)關(guān)閉端口以進(jìn)行關(guān)閉
tomcat.getServer().setPort(shutdownPort);
//加載上下文
StandardContext standardContext = new StandardContext();
standardContext.setPath("/aa");//contextPath
standardContext.setDocBase("aa");//文件目錄位置
standardContext.addLifecycleListener(new Tomcat.DefaultWebXmlListener()) ;
//保證已經(jīng)配置好了纺棺。
standardContext.addLifecycleListener(new Tomcat.FixContextListener());
standardContext.setSessionCookieName("t-session");
tomcat.getHost().addChild(standardContext);
tomcat.start();
tomcat.getServer().await();
private static void shutdown() throws Exception {
Socket socket = new Socket("localhost", shutdownPort);
OutputStream stream = socket.getOutputStream();
for(int i = 0;i < shutdown.length();i++)
stream.write(shutdown.charAt(i));
stream.flush();
stream.close();
socket.close();
}
objenesis.jar和spring-cglib-repack.jar
spring-cglib-repack是spring cglib的具體實(shí)現(xiàn) objenesis是序列化用的
objenesis 介紹地址:http://objenesis.org/
spring-cglib-repack 在spring4中內(nèi)聯(lián)了objenesis類庫(kù)
基于CGLIB的類代理不再要求類必須有空參構(gòu)造器了:
這是一個(gè)很好的特性,使用構(gòu)造器注入有很多好處邪狞,比如可以只在創(chuàng)建Bean時(shí)注入依賴祷蝌,然后就不變了,如果使用setter注入帆卓,是允許別人改的巨朦。當(dāng)然我們可以使用spring的字段級(jí)別注入。如果大家使用過(guò)如Shiro剑令,我們可能要對(duì)Controller加代理糊啡。如果是類級(jí)別代理,此時(shí)要求Controller必須有空參構(gòu)造器吁津,有時(shí)候挺煩人的棚蓄。spring如何實(shí)現(xiàn)的呢?其內(nèi)聯(lián)了objenesis類庫(kù)碍脏,通過(guò)它來(lái)實(shí)現(xiàn)梭依,可以去其官網(wǎng)看看介紹
jar包終于大概說(shuō)了一遍 好餓去吃飯。