Spring框架是什么?
Spring是為企業(yè)Java最流行的應(yīng)用程序開發(fā)框架。數(shù)以百萬(wàn)計(jì)的世界各地的開發(fā)人員使用Spring框架來創(chuàng)建高性能,易于測(cè)試的,可重用的代碼。
Spring框架是一個(gè)開源的Java平臺(tái),它最初是由Rod Johnson編寫并在2003年6月在Apache2.0許可下首次發(fā)布。
Spring是輕量級(jí)的,當(dāng)涉及到大小和透明度。 spring框架的基本版本是大約2MB。
Spring框架的核心功能可以在任何Java應(yīng)用程序中使用,但也有擴(kuò)展的Java EE平臺(tái)上構(gòu)建Web應(yīng)用程序。 Spring框架的目標(biāo),以使J2EE開發(fā)更容易使用,并且通過使基于POJO的編程模型,促進(jìn)良好的編程習(xí)慣。
使用Spring框架的好處:
以下是一些使用Spring框架的極大的好處列表:
Spring 使開發(fā)人員使用POJO來開發(fā)企業(yè)級(jí)應(yīng)用程序。僅使用POJO的好處是不需要EJB容器產(chǎn)品,如應(yīng)用服務(wù)器,但必須只使用一個(gè)強(qiáng)大的servlet容器,如Tomcat 或某些商業(yè)產(chǎn)品的選擇。
Spring 被組織在一個(gè)模塊化的方式。雖然包和類的數(shù)量是巨大的,你只有擔(dān)心那些需要的,而其它的就忽略了。
Spring不重新發(fā)明輪子,而是真正利用了一些像一些ORM框架,日志框架,JEE,Quartz和JDK定時(shí)器,其他視圖技術(shù)的現(xiàn)有技術(shù)。
編寫測(cè)試Spring的應(yīng)用程序很簡(jiǎn)單,因?yàn)榄h(huán)境相關(guān)的代碼被移動(dòng)到這個(gè)框架中。此外,通過使用JavaBean風(fēng)格的POJO,它變得更容易使用依賴注入注入測(cè)試數(shù)據(jù)。
Spring web框架是一個(gè)設(shè)計(jì)良好的Web MVC框架,它提供了一個(gè)很好的替代Web框架,如Struts或其他過度設(shè)計(jì)或不太流行的Web框架。
Spring提供了一個(gè)方便的API平移技術(shù)特定的異常(通過JDBC,Hibernate,或者JDO拋出,例如)成一致,未經(jīng)檢查的異常。
輕量級(jí)的IoC容器往往是輕量級(jí)的,尤其是相對(duì)EJB容器,例如。這有利于開發(fā)和有限的內(nèi)存和CPU資源的計(jì)算機(jī)上部署應(yīng)用程序。
Spring提供了一致的事務(wù)管理接口,可向下擴(kuò)展到(使用一個(gè)單一的數(shù)據(jù)庫(kù),例如)本地事務(wù)并擴(kuò)展到全局事務(wù)(使用JTA,例如)。
依賴注入(DI):
Spring最有確定的技術(shù)是依賴注入控制反轉(zhuǎn)(DI)。控制反轉(zhuǎn)(IoC)是一個(gè)籠統(tǒng)的概念,它可以表現(xiàn)在許多不同的方式和依賴注入僅僅是控制反轉(zhuǎn)的一個(gè)具體的例子。
當(dāng)編寫一個(gè)復(fù)雜的Java應(yīng)用程序,應(yīng)用程序類應(yīng)該盡可能獨(dú)立其他Java類來增加重復(fù)使用這些類,并獨(dú)立于其他類別的測(cè)試它們,而這樣做單元測(cè)試的可能性。依賴注入有助于粘合這些類在一起,同時(shí)保持他們的獨(dú)立。
什么是依賴注入是什么呢?讓我們來看看這兩個(gè)詞分開。這里的依賴性部分轉(zhuǎn)化為兩個(gè)類之間的關(guān)聯(lián)。例如,A類是依賴B類,現(xiàn)在,讓我們來看看第二部分,注入。這一切都意味著,B類將由IOC注入到A類得到。
依賴注入可以將參數(shù)傳遞給構(gòu)造函數(shù)的方式或使用后建設(shè)setter方法??發(fā)生。依賴注入是Spring框架的核心,所以會(huì)在一個(gè)單獨(dú)的章節(jié),一個(gè)不錯(cuò)的例子解釋這個(gè)概念。
面向切面編程(AOP):
Spring的一個(gè)關(guān)鍵組件是面向切面編程(AOP)框架。跨越多個(gè)點(diǎn)的應(yīng)用程序的功能被稱為橫切關(guān)注點(diǎn)和這些橫切關(guān)注點(diǎn)是從應(yīng)用程序的業(yè)務(wù)邏輯概念上區(qū)分開來。有方面的各種常見很好的例子包括日志記錄,聲明性事務(wù),安全性和高速緩存等。
模塊化的OOP關(guān)鍵單元是類,而在AOP中模塊化的單元?jiǎng)t是切面。DI幫助您從彼此分離的應(yīng)用程序?qū)ο螅珹OP可以幫助你消除來自他們影響的對(duì)象橫切關(guān)注點(diǎn)。
Spring框架AOP模塊提供了面向方面編程實(shí)現(xiàn),允許您定義方法攔截器和切入點(diǎn),以干凈脫鉤,實(shí)現(xiàn)的功能,應(yīng)該分開代碼。我將在單獨(dú)的一章討論Spring AOP的概念。
Hello World
讓我們從實(shí)際編程中使用Spring框架。在開始編寫使用Spring框架的第一個(gè)例子,你必須確保已經(jīng)設(shè)置Spring環(huán)境。需要對(duì)Eclipse IDE有一點(diǎn)知識(shí)。
因此,讓我們著手編寫一個(gè)簡(jiǎn)單的Spring應(yīng)用程序?qū)⒋蛴?“Hello World!” 或基于Spring bean 配置文件來完成配置的其他信息。
第1步 - 創(chuàng)建Java項(xiàng)目:
第一步是使用Eclipse IDE 創(chuàng)建一個(gè)簡(jiǎn)單的Java項(xiàng)目。選項(xiàng) File -> New -> Project 最后選擇 Java Project 從向?qū)Я斜硐驅(qū)А,F(xiàn)在,項(xiàng)目命名為 HelloSpring 使用向?qū)Т翱冢缦滤荆?/p>
項(xiàng)目創(chuàng)建成功后,將在 Project Explorer 看到下面的內(nèi)容:
第2步 - 添加必需的庫(kù):
第二步添加 Spring框架,并在我們的項(xiàng)目中通用的日志API庫(kù)。要做到這一點(diǎn),右鍵單擊您的項(xiàng)目名稱 HelloSpring 然后按照上下文菜單中提供以下選項(xiàng): Build Path -> Configure Build Path 如下顯示的Java 構(gòu)建路徑窗口:
現(xiàn)在,使用Add External JARs 選項(xiàng) Libraries 卡提供外部JAR按鈕,添加從Spring框架和通用日志安裝目錄下面的核心JAR文件:
- antlr-runtime-3.0.1
- org.springframework.aop-3.1.0.M2
- org.springframework.asm-3.1.0.M2
- org.springframework.aspects-3.1.0.M2
- org.springframework.beans-3.1.0.M2
- org.springframework.context.support-3.1.0.M2
- org.springframework.context-3.1.0.M2
- org.springframework.core-3.1.0.M2
- org.springframework.expression-3.1.0.M2
- commons-logging-1.1.1
第3步 - 創(chuàng)建源文件:
現(xiàn)在讓我們根據(jù)實(shí)際創(chuàng)建的源文件 HelloSpring 項(xiàng)目。首先,我們需要?jiǎng)?chuàng)建一個(gè)名為包 com.yiibai. 要做到這一點(diǎn),右鍵點(diǎn)擊 src 在包資源管理部分,并按照選項(xiàng):New -> Package.
下一步我們創(chuàng)建 HelloWorld.java 和 MainApp.java 在com.yiibai 包下文件。
這里是 HelloWorld.java 的文件的內(nèi)容:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package com.yiibai; public class HelloWorld { private String message; public void setMessage(String message){ this .message = message; } public void getMessage(){ System.out.println( "Your Message : " + message); } } |
下面是第二個(gè)文件 MainApp.java 的內(nèi)容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.yiibai; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "Beans.xml" ); HelloWorld obj = (HelloWorld) context.getBean( "helloWorld" ); obj.getMessage(); } } |
有以下兩個(gè)要點(diǎn)需要注意在主要程序中:
第一步是創(chuàng)建在這里我們使用框架API ClassPathXmlApplicationContext() 應(yīng)用程序上下文。這個(gè)API加載 beans 的配置文件,并最終基于所提供的API,它需要?jiǎng)?chuàng)建并初始化所有的對(duì)象。在配置文件中提到的beans 類。
第二個(gè)步驟是用來使用創(chuàng)建的上下文的 getBean() 方法獲得所需的bean。此方法使用 bean 的 id 返回,最終可以創(chuàng)建實(shí)際對(duì)象的通用對(duì)象。一旦有了對(duì)象,就可以使用這個(gè)對(duì)象調(diào)用任何類方法。
第4步 - 創(chuàng)建bean配置文件:
需要?jiǎng)?chuàng)建一個(gè)bean 配置文件,該文件是一個(gè)XML文件,并作為 cement 等類組合在一起。這個(gè)文件需要在src 目錄下創(chuàng)建如下圖所示:
通常開發(fā)人員保留此文件的名稱為 beans.xml 文件,但是必須為獨(dú)立的,選擇你喜歡的任何名稱。必須確保這個(gè)文件在 CLASSPATH 中可用,并使用相同的名稱在主應(yīng)用程序而創(chuàng)建的應(yīng)用程序上下文,如圖MainApp.java文件。
在 beans.xml 中用于分配唯一的ID,以不同的 bean 和控制創(chuàng)造不同的值對(duì)象,而不會(huì)影響任何 Spring 的源文件。例如,使用下面的文件,可以通過為“message”變量的任何值,這樣你就可以打印消息的不同的值,而不會(huì)影響的 HelloWorld.java 和 MainApp.java 文件。讓我們來看看它是如何工作的:
1
2
3
4
5
6
7
8
9
10
11
12
|
<? xml version = "1.0" encoding = "UTF-8" ?> < beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> < bean id = "helloWorld" class = "com.yiibai.HelloWorld" > < property name = "message" value = "Hello World!" /> </ bean > </ beans > |
在Spring 應(yīng)用程序被加載到內(nèi)存中,框架利用了上面的配置文件來創(chuàng)建所有定義的 Bean,并在 <bean> 標(biāo)記定義為它們分配一個(gè)唯一的 ID。您可以使用 <property> 標(biāo)簽來傳遞在創(chuàng)建對(duì)象時(shí)使用不同的變量的值。
第5步 - 運(yùn)行程序:
創(chuàng)建源代碼和 bean 配置文件來完成,準(zhǔn)備好這一步是編譯和運(yùn)行程序。要做到這一點(diǎn),保持 MainApp.Java 文件選項(xiàng)卡激活并使用在Eclipse IDE中提供 Run 選項(xiàng),或使用Ctrl + F11可以編譯并運(yùn)行應(yīng)用程序MainApp。如果一切順利那么應(yīng)用程序這將打印以下信息在 Eclipse IDE 控制臺(tái):
Your Message : Hello World!
恭喜,你已經(jīng)創(chuàng)建了第一個(gè)Spring應(yīng)用并成功執(zhí)行。您可以通過更改“message”屬性的值,并保持兩者的源文件不變見上 Spring 應(yīng)用程序的靈活性。