Spring學習總結1(基礎與IOC依賴注入)

Spring 是一個開源框架,是爲了解決企業應用程序開發複雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時爲 J2EE 應用程序開發提供集成的框架。

 

  • 核心容器:核心容器提供 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是一種完全面向接口的設計。

Sping的兩大核心爲:IOC控制反轉DI依賴注入[Inversion of Control],AOP面向方面編程。

 

Spring Framework一個重要的原則就是無侵入性(non-invasiveness); 這個思想指你不應當被迫引入框架特定的類和接口到你的業務/領域模型中。

 

Spring從簡單理解,可以引申爲工廠模式的一種封裝。

工廠模式主要使用在實現的接口類對象的獲取。

類對象的獲取途徑主要有以下幾種:

1.直接用new的形式獲取。接口類型 對象名 = new 實現接口的類型();   缺點:客戶端在調用時必須明確知道實現接口的類型,程序之間耦合緊密。

2.使用工廠設計模式。 缺點:一個接口就需要一個工廠,接口多的話,工廠也會多,不易管理。

3.使用反射機制 Class.forName()

4.使用對象克隆 缺點:和1一樣,耦合緊密。

 

Spring包的獲取:

1.http://www.springframework.org/ 中下載最新的jar包

2.將下載下來的dist文件夾和lib文件夾中的文件拷貝到工程引用jar路徑下

 

 

Spring的核心配置:

Spring的xml配置:applicationContext.xml

 

Spring IoC容器的實例化

ApplicationContext在本地應用中的實例化

 

同時加載多個配置的另一種寫法:

 

ApplicationContext在WEB應用中的實例化

1.ContextLoaderListener方式

 

2.ContextLoaderServlet方式

 

 

注入類型一共分三種:

1.構造函數注入

2.屬性注入(通過set和get方法)

3.接口注入(相當於將類似於set的方法聲明在一個接口中)

 

Spring對以上前2種的注入有非常棒的支持,而第3種注入本身就很少使用(於通過接口注入需要額外聲明一個接口,增加了類的數目,而且它的效果和屬性注入並無本質區別,因此我們不提倡這種方式)。

 

在Spring中,BeanFactory是IoC容器的核心接口。 它的職責包括:實例化、定位、配置應用程序中的對象及建立這些對象間的依賴。

 

基於XML配置方式,注入示例:

Simple.java

 

applicationContext.xml

 

idref

僅適用於對bean名稱即String類型的引用,ref是對bean實例的引用。

 

ref

1.<ref bean="someBean"/>  在當前容器中查找someBean

2.<ref local="someBean"/>  在當前xml中查找someBean

3.<ref parent="someBean"/>  在父容器中查找someBean

 

內部bean

內部bean中的scope標記及id或name屬性將被忽略。內部bean總是匿名的且它們總是prototype模式的。同時將內部bean注入到包含該內部bean之外的bean是不可能的。

空字符串的注入

 

null的注入

 

 

方法注入

在大部分情況下,容器中的bean都是singleton類型的。如果一個singleton bean要引用另外一個singleton bean,或者一個非singleton bean要引用另外一個非singleton bean時,通常情況下將一個bean定義爲另一個bean的property值就可以了。不過對於具有不同生命週期的bean來說這樣做就會有問題了,比如在調用一個singleton類型bean A的某個方法時,需要引用另一個非singleton(prototype)類型的bean B,對於bean A來說,容器只會創建一次,這樣就沒法在需要的時候每次讓容器爲bean A提供一個新的的bean B實例。

解決方案爲:不直接將需要的bean注入,而是定義一個抽象方法,在需要的地方調用該抽象方法進行bean的獲取,而該抽象方法在xml中進行配置注入

 

 

 

基於XML的元數據是最常用到的配置元數據格式。然而,它並 不是唯一的描述格式。Spring IoC容器在這一點上是 完全開放的。

Spring還提供了基於註解的配置元數據格式。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章