天天看點

spring基礎

1含義:為解決企業應用開發的複雜性而建立的開源架構,用基本的javabean來完成ejb的事情 從大小和開銷方向spring都是輕量級的。

2,用途

① ioc容器可以将對象之間的依賴關系交由spring管理,進行控制。

② aop:友善進行面向切面的程式設計,是oop的擴充,想加什麼功能直接加。

③ 能夠內建各種優秀的架構,struts hibernate等。

3,spring 組成内容

4,準備配置工作

① 下載下傳springframework的最新版本,并解壓縮到指定目錄。在ide中建立一個項目,并将spring.jar将其相關類庫加入項目。

② 配置檔案 bean.xml。

③ 在classpath建立日志輸出檔案。log4j.properties。

④ org.springframework.beans及org.springframework.context包是spring ioc容器的基礎。

5,spring 基礎語義

1)ioc (inversion of control)=di (dependency injection)控制反轉和依賴注入,它是一種基于接口的程式設計,bean由容器建立在需要的時候拿來用即可,主要是采用反射來實作,其核心組建就是beanfactory 但實際開發常用xmlbeanfactory

2)依賴注入的幾種實作類型

type1設值注入:通過類的setter方法完成依賴關系的設定,就是給bean類中屬性加set方法。

type3 構造子注入:即通過構造函數完成依賴關系的設定。

3)幾種依賴注入模式的對比總結

type2 設值注入的優勢

1.對于習慣了傳統javabean開發的程式員而言,通過setter方法設定依賴關系顯得更加直覺,更加自然。

2.如果依賴關系(或繼承關系)較為複雜,那麼type3模式的構造函數也會相當龐大(我們需要在構造函數中設定所有依賴關系),此時type2模式往往更為簡潔。

3.對于某些第三方類庫而言,可能要求我們的元件必須提供一個預設的構造函數(如struts中的action),此時type3類型的依賴注入機制就展現出其局限性,難以完成我們期望的功能。

type3 構造子注入的優勢:

1.“在構造期即建立一個完整、合法的對象”,對于這條java設計原則,type3無疑是最好的響應者。

2.避免了繁瑣的setter方法的編寫,所有依賴關系均在構造函數中設定,依賴關系集中呈現,更加易讀。

3.由于沒有setter方法,依賴關系在構造時由容器一次性設定,是以元件在被建立之後即處于相對“不變”的穩定狀态,無需擔心上層代碼在調用過程中執行setter方法對元件依賴關系産生破壞,特别是對于singleton模式的元件而言,這可能對整個系統産生重大的影響。

4.同樣,由于關聯關系僅在構造函數中表達,隻有元件建立者需要關心元件内部的依賴關系。對調用者而言,元件中的依賴關系處于黑盒之中。對上層屏蔽不必要的資訊,也為系統的層次清晰性提供了保證。

5.通過構造子注入,意味着我們可以在構造函數中決定依賴關系的注入順序,對于一個大量依賴外部服務的元件而言,依賴關系的獲得順序可能非常重要,比如某個依賴關系注入的先決條件是元件的datasource及相關資源已經被設定。

理論上,以type3類型為主,輔之以type2類型機制作為補充,可以達到最好的依賴注入效果,不過對于基于spring framework開發的應用而言,type2使用更加廣泛。

4)bean.xml配置檔案

bean factory,顧名思義,負責建立并維護bean執行個體。

bean factory負責根據配置檔案建立bean執行個體,可以配置的項目有:

1.bean屬性值及依賴關系(對其他bean的引用)

2.bean建立模式(是否singleton模式,即是否隻針對指定類維持全局唯一的執行個體)

3.bean初始化和銷毀方法

4.bean的依賴關系

5)xmlbeanfactory兩中注入方式的配置

①property-------?set方法的注入配置

②constructor---------?構造方法的注入配置

說明: index=”0”構造方法第一個參數,用index可以稍微減少備援,但是它更容易出錯且不如type屬性可讀性高。你應該僅在構造函數中有參數沖突時使用index。

6) 依賴的目标類型分成三種形式:

1) 基本類型+string

data類型自動轉化

2) 對其他bean 的引用

3) 集合類型 list props set map

list set properties配置類似:

[ 尐魚兒的qq群:726994578 ] --- [ https://github.com/godmaybelieve ]