SSH三大框架初探之Spring
簡介
- 目的:解決企業應用開發的複雜性
- 功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能
- 範圍:任何Java應用
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在覈心容器之上,核心容器定義了創建、配置和管理 bean 的方式。
組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:
• 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
• Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。
• Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。
• Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
• Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
• Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。
• Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring 框架的功能可以用在任何 J2EE 服務器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE 服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象可以在不同 J2EE 環境 (Web 或 EJB)、獨立應用程序、測試環境之間重用。
◆Spring作爲全方位的應用程序框架(Framework)
◆術語描述
① 輕量級(Lightweight)。Spring 核心包容量不到1MB的大小,可以在很多小型設備中使用Spring。
② 非侵入性(No intrusive)。增強應用程序組件的可重用性,減少對框架的依賴。
③ 容器(Container)。根據配置文件自動生成對象及屬性等,不用編寫任何代碼來產生對象。
④ Inversion of Control(IOC)與Dependency Injection(DI)。IOC目的就是依賴於抽象;對象之間的關係由容器根據配置文件將依賴注入指定的對象中。
⑤ AOP(Aspect-oriented programming)。基於代理及攔截器的機制,與Spring IOC 結合,採用運行時Weaving方式在Spring框架的應用程序中使用各種聲明式系統級服務。
⑥ 持久層(Persistent)。Spring提供DAO、編程事務與聲明式事務,對於ORM工具(Hibernate、iBATIS)的整合及使用上簡化。
⑦ JavaEE服務。可以使用JavaEE標準規範提供的各項服務,並無縫結合。
◆Spring框架的優勢
① 使J2EE易用和促進好編程習慣。
Spring不重新開發已有的東西。因此,在Spring中你將發現沒有日誌記錄的包,沒有連接池,沒有分佈事務調度。這些均有開源項目提供(例如Commons Logging 用來做所有的日誌輸出,或Commons DBCP用來作數據連接池),或由你的應用程序服務器提供。因爲同樣的的原因,我們沒有提供O/R mapping層,對此,已有好的解決辦法如Hibernate和JPA。
② 使已存在的技術更加易用。
例如,儘管我們沒有底層事務協調處理,但我們提供了一個抽象層覆蓋了JTA或任何其他的事務策略。
③ 沒有直接和其他的開源項目競爭。
例如,許多開發人員,我們從來沒有爲Struts高興過,並且感到在MVC框架中還有改進的餘地。在某些領域,例如輕量級的IoC容器和AOP框架,Spring有直接的競爭,但是在這些領域還沒有已經較爲流行的解決方案。(Spring在這些區域是開路先鋒。)
④ Spring在應用服務器之間是可移植的。保證可移植性總是一項挑戰,但是Spring避免任何特定平臺或非標準化,並且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的應用服務器上的用戶。
⑤ 方便解耦,簡化開發。
通過Spring提供的IoC容器,我們可以將對象之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程序耦合。有了Spring,用戶不必再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專注於上層的應用。
⑥ AOP編程的支持。
通過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。
⑦ 聲明式事務的支持
在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。
⑧ 方便程序的測試
可以用非容器依賴的編程方式進行幾乎所有的測試工作,在Spring裏,測試不再是昂貴的操作,而是隨手可做的事情。
⑨ 方便集成各種優秀框架
Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts,Hibernate)等的直接支持。
⑩ 降低Java EE API的使用難度
Spring對很多難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大爲降低。
◆下載、設置Spring
http://springframework.org/
◆準備Spring設計環境
◆編寫第一個Spring程序
HelloWorld接口:
- /**
- *
- * @Copyright(C),2009-2010 SISE Java Team.
- * @Author:easinchu
- * @Email:[email protected]
- * @Description:
- */
- public interface HelloWorld {
- public void sayHello();
- }
HelloWorldBean實現類:
- /**
- *
- * @Copyright(C),2009-2010 SISE Java Team.
- * @Author:easinchu
- * @Email:[email protected]
- * @Description:
- */
- public class HelloWorldBean implements HelloWorld{
- private String helloWorld;
- public void setHelloWorld(String helloWorld) {
- this.helloWorld = helloWorld;
- }
- public void sayHello() {
- System.out.println(helloWorld);
- }
- }
Spring XML配置文件ioc-config.xml:
- <bean id="helloWorldBean" class="cn.com.sise.firstapp.HelloWorldBean">
- <property name="helloWorld">
- <value>Hello,Welcome To Spring World!</value>
- </property>
- </bean>
測試類:
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.beans.factory.xml.XmlBeanFactory;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.core.io.Resource;
- /**
- *
- *@Copyright(C),2009-2010 SISE Java Team.
- *@Author:easinchu
- *@Email:[email protected]
- *@Description:採用Spring的BeanFactory構造IoC容器.
- */
- public class FirstSpringDemo {
- public static void main(String []args) {
- //-----------BeanFactory IoC容器---------------------//
- //從classpath路徑上裝載XML的配置信息
- Resource resource = new ClassPathResource("ioc-config.xml");
- //實例化IOC容器,此時容器並未實例化beans-config.xml所定義的各個受管bean.
- BeanFactory factory = new XmlBeanFactory(resource);
- /
- //獲取受管bean
- HelloWorld hello = (HelloWorld)factory.getBean("helloWorldBean");
- hello.sayHello();
- }
- }
步驟小結
①利用XmlBeanFactory讀取xml配置文件並建立BeanFactory實例
②BeanFactory依據配置文件完成依賴注入
③通過getBean()方法指定Bean名稱取得Bean實例