對(duì)于Java開(kāi)發(fā)者來(lái)說(shuō),現(xiàn)在是一個(gè)很好的時(shí)期。
在20年的歷史中,Java經(jīng)歷過(guò)一些好的時(shí)期以及不好的時(shí)期。盡管存在著一些粗糙點(diǎn)(rough spots),例如applets, Enterprise JavaBeans(EJB), Java Data Objects(JDO),以及數(shù)不盡的日志框架,Java仍然擁有著一個(gè)豐富的多樣化的歷史,作為許多企業(yè)級(jí)軟件的平臺(tái)而言。而且,Spring在這一段歷史上占有很重要的一筆。
在早期,Spring作為更加重量級(jí)的Java技術(shù)(特別是EJB)的替代品被創(chuàng)造出來(lái)。相比EJB,Spring提供了一個(gè)更輕量更簡(jiǎn)潔的的編程模型。它給予了普通Java對(duì)象(POJO)更加強(qiáng)大的能力,而這些能力是EJB和一些其他Java規(guī)格才擁有的。
隨著時(shí)間的過(guò)去,EJB和J2EE得到了發(fā)展。EJB開(kāi)始自身提供簡(jiǎn)單的面向POJO的變成模型?,F(xiàn)在EJB利用了諸如依賴(lài)注入和面向方面變成的思想,可以說(shuō)其靈感來(lái)自于Spring的成功。
雖然J2EE(現(xiàn)在被稱(chēng)為JEE)可以趕上Spring,但是Spring從未停止前進(jìn)的腳步。Spring持續(xù)的發(fā)展各個(gè)領(lǐng)域。而這些領(lǐng)域,即使是現(xiàn)在,JEE才剛剛開(kāi)始開(kāi)始探索,甚至還未引入。移動(dòng)開(kāi)發(fā),社交API集成,NoSQL數(shù)據(jù)庫(kù),云計(jì)算,以及大數(shù)據(jù)只是Spring引入的一小部分領(lǐng)域。而且,未來(lái)的Spring依然一片光明。
正如我所說(shuō),對(duì)于開(kāi)發(fā)者來(lái)說(shuō),現(xiàn)在是一個(gè)很好的時(shí)期。
這本書(shū)是對(duì)Spring的一個(gè)探索。在這一章節(jié),我們將在高層次測(cè)試Spring,讓你品嘗一下Spring到底是什么。這一章將讓你明白Spring到底解決了各種什么樣的問(wèn)題,并且未這本書(shū)的其余部分做好準(zhǔn)備。
1.1 簡(jiǎn)化Java開(kāi)發(fā)
Spring是由Rod Johnson創(chuàng)造的一個(gè)開(kāi)源框架。Spring被創(chuàng)造出來(lái)以解決企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的復(fù)雜問(wèn)題,并且讓普通的JavaBeans(plain-vanilla JavaBeans)能夠完成此前只有EJB才可能完成的任務(wù)。但是Spring的用處并不僅僅局限于服務(wù)器端開(kāi)發(fā)。而且Java應(yīng)用可以從Spring中獲益,例如間接性、可測(cè)試性以及松耦合。
另一種意義的bean...雖然在表示應(yīng)用組件時(shí),Spring大方地使用了bean和JavaBean這兩個(gè)詞,但這并不表示一個(gè)Spring組件必須嚴(yán)格地遵從JavaBean的規(guī)格。一個(gè)Spring組件可以是任何形式的POJO。在本書(shū)中,我假設(shè)JavaBean是一個(gè)寬松的定義,與POJO同義。
通過(guò)本書(shū)你將了解到,Spring做了許多事情。但是Spring提供的幾乎每一個(gè)功能的根基,是一些非?;A(chǔ)的想法,全部專(zhuān)注于Spring的基本任務(wù):Spring簡(jiǎn)化Java開(kāi)發(fā)。
這里是粗體!大量的框架說(shuō)要簡(jiǎn)化某一些事物。但是Spring旨在簡(jiǎn)化Java開(kāi)發(fā)這一廣泛主題。這還需要更多的解釋。Spring是如何簡(jiǎn)化Java開(kāi)發(fā)的呢?
為了支持對(duì)Java復(fù)雜度的攻擊,Spring利用了4個(gè)關(guān)鍵策略:
利用POJO的輕量級(jí)與最小侵入式開(kāi)發(fā)(Lightweight and minimally invasive development with POJOs)
通過(guò)DI和面向接口實(shí)現(xiàn)松耦合(Loose coupling through DI and interface orientation)
通過(guò)方面和普通慣例實(shí)現(xiàn)聲明式編程(Declarative programming through aspects and common conventions)
利用方面和模板消除陳詞濫調(diào)的代碼(Eliminating boilerplate code with aspects and templates)
基本上Spring做的每一件事都可以追溯到這四條策略中的一條或幾條上。