1.2 Spring初探
Spring的作者是“J2EE實(shí)用主義”倡導(dǎo)者。簡單、實(shí)用也是Spring的追求目標(biāo)。Spring是從實(shí)際開發(fā)中抽取的框架,具有高度的復(fù)用性。Spring涵蓋了大多數(shù)應(yīng)用系統(tǒng)開發(fā)涉及的技術(shù)范疇,包括MVC、ORM以及遠(yuǎn)程訪問等,Spring對這些技術(shù)進(jìn)一步封裝和抽象,使開發(fā)過程更加簡單、清晰。 Spring完成了實(shí)際開發(fā)中需要實(shí)現(xiàn)的設(shè)計(jì)模式:工廠和單態(tài)。使用Spring將意味著:開發(fā)者無須自己提供單態(tài)和工廠模式的實(shí)現(xiàn)。 1.2.1 運(yùn)行Spring所需的環(huán)境Java語言本身是跨平臺(tái)的,Spring也是跨平臺(tái)的。但Spring需要有JDK的開發(fā)環(huán)境,Spring支持1.3以上的各種JDK版本。筆者所用的代碼全部在JDK1.4上測試通過,因此建議讀者安裝JDK1.4版本。 Web服務(wù)器則采用Tomcat5.0.28。 為了輔助編譯和運(yùn)行程序,筆者開發(fā)過程中也使用到Ant工具,筆者所用的版本是1.6.5。 筆者也給出Spring在Eclipse里的安裝和使用。Eclipse建議使用3.1以上版本。 JDK的安裝此處不再贅述,此處略述Tomcat和Ant的安裝。 安裝Tomcat和Ant的前提是:成功安裝、配置JDK的開發(fā)環(huán)境。 (1)到HTUhttp://tomcat.UTH下載Tomcat合適的版本,如果使用JDK1.4,則建議使用Tomcat5.0.x系列,而不是使用Tomcat5.5.x系列。 (2)Windows平臺(tái)下載zip包,Linux下載tar包。 (3)解壓縮剛下載到的壓縮包,將解壓縮后的文件夾放到任意路徑下。 (4)然后增加JAVA_HOME環(huán)境變量,讓該變量指向JDK的安裝路徑。 注意:Spring并不依賴于任何特定的J2EE應(yīng)用服務(wù)器,因此安裝Tomcat并不是必需的。所有的Web應(yīng)用完全可在Tomcat,Resin,WebLogic,WebSphere上運(yùn)行良好。 Ant的下載和安裝請按如下步驟進(jìn)行。 (1)到http://ant.下載Ant的最新版。以Ant1.6.5為例,下載后解壓縮會(huì)產(chǎn)生一個(gè)文件夾,修改該文件夾的名字為ant165(不修改亦可,但為了簡單起見,建議修改),然后,將該文件夾放在任意路徑即可。 (2)增加環(huán)境變量ANT_HOME,該環(huán)境變量指向剛才ant165文件夾所在的全限定路徑。 (3)修改環(huán)境變量path,為path增加%ANT_HOME%/bin路徑即可。 經(jīng)過上面步驟,Ant安裝成功。 1.2.2 Spring的下載和安裝在筆者成書之時(shí),Spring主要有兩個(gè)版本: q 產(chǎn)品化的1.2.7的穩(wěn)定發(fā)布版 q 開發(fā)者使用的2.0 m4版 對于普通的學(xué)習(xí)者,建議使用產(chǎn)品化的穩(wěn)定版。 到http://www.下載Spring的最新穩(wěn)定版。建議下載spring-framework-1.2.7-with-dependencies.zip包,該壓縮包不僅包含Spring的開發(fā)包,而且包含Spring編譯和運(yùn)行所依賴的第三方類庫。 解壓縮下載到的壓縮包,解壓縮后的文件夾下應(yīng)有如下幾個(gè)文件夾: q dist:該文件夾下放Spring的jar包,通常只需要spring.jar文件即可。該文件夾下還有一些類似spring-Xxx.jar的壓縮包,這些壓縮包是spring.jar壓縮包的子模塊壓縮包。除非確定整個(gè)J2EE應(yīng)用只需使用Spring的某一方面,才考慮使用這種分模塊壓縮包。通常建議使用spring.jar。 q docs:該文件夾下包含Spring的相關(guān)文檔,包含開發(fā)指南,API參考文檔。 q lib:該文件夾下包含Spring編譯和運(yùn)行所依賴的第三方類庫,該路徑下的類庫并不是Spring必需的,但如果需要使用第三方類庫的支持,這里的類庫就是必需的。 q samples:該文件夾下包含Spring的幾個(gè)簡單示例,可作為Spring的入門學(xué)習(xí)的案例。 q src:該文件夾下包含Spring的全部源文件,如果開發(fā)過程有地方無法把握,可以參考該處源文件,了解底層的實(shí)現(xiàn)。 q test:該文件夾下包含Spring的測試用例,它們可作為學(xué)習(xí)Spring的入門代碼。 q tiger:該路徑下存放關(guān)于JDK1.5的相關(guān)內(nèi)容。 解壓縮后的文件夾下,還包含一些關(guān)于Spring的license和項(xiàng)目相關(guān)文件。 Spring的安裝,筆者將從兩個(gè)方面進(jìn)行介紹:分別介紹IDE工具:Eclipse里的安裝和使用,以及使用Ant工具的開發(fā)方式。讀者可根據(jù)自己的習(xí)慣自由選擇開發(fā)方式。 (1)新建一個(gè)Spring項(xiàng)目,命名為myspring,如圖1.1所示: (2)單擊“Next”按鈕,然后單擊下一個(gè)對話框中“Finish”按鈕,建立項(xiàng)目成功。 (3)右擊Eclipse左邊導(dǎo)航窗口的“myspring”節(jié)點(diǎn),在彈出菜單中選擇“new”菜單項(xiàng),接著出現(xiàn)下一個(gè)菜單,單擊Folder菜單項(xiàng),如圖1.2所示。在彈出對話框的“Folder name文本框中輸入lib。然后單擊“OK”按鈕,添加文件夾成功。添加完文件夾的效果如圖1.3所示。
圖1.1 新建myspring的項(xiàng)目 圖1.2 新建文件夾的操作步驟 (4)Spring的二進(jìn)制包被解壓縮后,會(huì)產(chǎn)生一個(gè)dist文件夾,將里面的spring.jar文件復(fù)制到lib文件夾下。 (5)右擊左邊導(dǎo)航面板的myspring節(jié)點(diǎn),在快捷菜單里選擇“Properties”菜單項(xiàng),將彈出如圖1.4所示的屬性對話框。
圖1.3 添加完lib文件夾后的包結(jié)構(gòu)圖 圖1.4 增加用戶庫的步驟 (6)單擊圖1.4所示屬性對話框左邊的“Add Library”按鈕,彈出Add Library對話框的選擇庫類型頁面(如圖1.5所示)。 (7)單擊 “Next”按鈕,出現(xiàn)Add Library對話框的選擇庫頁面(如圖1.6所示)。
圖1.5 增加用戶庫 圖1.6 增加用戶庫 (8)單擊“User Libraries”按鈕,彈出Preferences對話框,如圖1.7所示。 (9)完成添加后,Eclipse左邊的導(dǎo)航欄應(yīng)如圖1.8所示。
圖1.7 新建用戶庫 圖1.8 增加spring用戶庫后的包結(jié)構(gòu)圖 (10)因?yàn)?/span>Spring使用commons-logging.jar和log4j.jar作為日志輸出,因此,也應(yīng)該將common-logging.jar和log4j.jar增加到用戶庫文件中。考慮到以后可能使用jakarta-common的各種jar文件,此時(shí),找到Spring解壓縮后lib文件夾下的jakarta-commons,將其下可能需要使用的lib都復(fù)制到myspring的lib文件夾下,同時(shí)也將log4j.jar文件復(fù)制到該文件夾下。重復(fù)第5步到第9步的過程,完成兩個(gè)用戶庫的添加,完成用戶庫添加后的包結(jié)構(gòu)圖如圖1.9所示。 圖1.9 增加完用戶庫后的包結(jié)構(gòu)圖 (11)為該項(xiàng)目增加log4j.properties文件,用來控制日志輸出。log4j.properties文件如下: # rootLogger是所有日志的根日志,修改該日志屬性將對所有日志起作用 #下面的屬性配置中,所有日志的輸出級別是DEBUG,輸出源是標(biāo)準(zhǔn)輸出源:stdout log4j.rootLogger=DEBUG, stdout # 定義標(biāo)準(zhǔn)輸出源stdout的輸入位置是控制臺(tái) log4j.appender.stdout=org.apache.log4j.ConsoleAppender # 定義輸出日志的布局采用的類 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # 定義輸出日志的布局 log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n (12)編寫運(yùn)行的主程序,主程序的代碼如下 public class Test { public static void main(String[] args) { //創(chuàng)建Spring的ApplicationContext ,用于測試 ApplicationContext ctx = new FileSystemXmlApplicationContext("beans.xml"); System.out.println(ctx); } } (13)在myspring文件夾內(nèi)編寫簡單的Spring配置文件,配置文件的內(nèi)容如下: <!-- 下面定義XML文件版本,編碼集--> <?xml version="1.0" encoding="gb2312"?> <!-- 定義Spring配置文件對應(yīng)的dtd--> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd"> <!-- beans是Spring配置文件的根元素--> <beans>
</beans> 1.2.2.3 使用Ant工具 使用Ant工具的具體步驟如下: (1)新建一個(gè)文件夾myspring。該文件夾將作為當(dāng)前項(xiàng)目的根文件夾。 (2)在myspring文件夾下新建文件夾src,該文件夾下存放項(xiàng)目源文件。 (3)在myspring文件夾下新建文件夾classes,該文件夾下存放項(xiàng)目編譯后的類文件。 (4)在myspring下新建文件夾lib,lib下存放該項(xiàng)目所需要的類庫。 (5)將Spring 解壓縮后dist文件夾下的spring.jar復(fù)制到lib文件夾下。 (6)將Spring解壓縮后jakarta-common文件夾下相關(guān)的*.jar文件復(fù)制到lib文件夾下。 (7)將Spring解壓縮后log4j文件夾下的log4j-1.2.13.jar文件復(fù)制到lib文件夾下。 經(jīng)過上面7個(gè)步驟,使用Ant工具將可以編譯和運(yùn)行項(xiàng)目。下面給出Ant編譯和運(yùn)行的腳本,該腳本文件放在myspring文件夾下: <?xml version="1.0"?> <!-- 定義編譯該項(xiàng)目的基本信息--> <project name="spring" basedir="." default="."> <!-- 定義編譯和運(yùn)行該項(xiàng)目時(shí)所需的庫文件 --> <path id="classpath"> <!-- 該路徑下存放spring.jar和其他第三方類庫 --> <fileset dir="lib"> <include name="*.jar"/> </fileset> <!-- 同時(shí),還需引用已經(jīng)編譯過的class文件--> <pathelement path="classes"/> </path> <!-- 編譯全部的java文件--> <target name="compile" description="Compile all source code"> <!-- 指定編譯后class文件的存放位置 --> <javac destdir="classes" debug="true" deprecation="false" optimize="false" failonerror="true"> <!-- 指定需要編譯的源文件的存放位置 --> <src path="src"/> <!-- 指定編譯這些java文件時(shí)需要的類庫位置--> <classpath refid="classpath"/> </javac> </target> <!-- 運(yùn)行特定的主程序 --> <target name="run" description="run the main class" depends="compile"> <!-- 指定運(yùn)行的主程序:lee.BeanTest。--> <java classname="lee.BeanTest" fork="yes" failonerror="true"> <!-- 指定運(yùn)行這些java文件時(shí)需要的類庫位置--> <classpath refid="classpath"/> </java> </target> </project> 該項(xiàng)目的主程序與采用Eclipse編寫的主程序代碼相比完全一樣,log4j.properties文件沒有任何區(qū)別。采用兩種工具的執(zhí)行效果也完全一樣。 |
|