Spring相關知識總結
此文章是根據網上某某有關spring講解的視訊,做的筆記,講的很好
Bean的建立規則
applicationContext.xml檔案簡單配置
在其中一個類中在空參構造中輸出一句話
-
BeanFactory物件:
提供的是一種延遲載入的思想,bean物件什麼時候使用,什麼時候進行建立
斷點打在19行,當載入完配置檔案時候,並沒有建立bean物件
只有在使用的時候,才建立了bean物件;繼續下一步,執行到21行時
bean物件被建立
- ApplicationContext物件:
容器一載入就直接建立bean物件,採用的是立即載入思想
將斷點打在第12行,進入斷點除錯,下一步看日誌資訊,在還沒有使用到該物件的情況下,就已經被建立
ApplicationContext物件的兩個實現類
ClassPathXmlApplicationContext:載入類路徑下面的配置檔案(一般我們使用這個類)
FileSystemXmlApplicationContext:可以載入磁碟路徑任意位置的配置檔案
Bean的建立方式
-
第一種:通過無參建構函式建立物件(開發常用)
該方式,如果沒有無參構造的話,會建立失敗,報異常
-
第二種:使用工廠建立物件
靜態工廠建立物件:需要使用bean標籤的factory-method屬性,指定靜態工廠的建立物件的方法
工廠類
applicationContext.xml配置
例項工廠建立物件
工廠類
apllicationContext.xml配置
Bean的作用範圍
通過bean的scope屬性進行配置
屬性的取值:
singleton:單例(預設)
prototype:多例(當我們讓spring接管struts2的action建立時,action必須配置)
request:作用範圍是一次請求,和當前請求的轉發
session:一次會話
globalsession:作用範圍是一次全域性會話
Bean的生命週期
涉及到的bean標籤的兩個屬性:
init-method :初始化方法,需要在bean物件中 ,寫一個 初始化的方法,進行配置驗證 destroy-method :銷燬方法,,需要在bean物件中 ,寫一個 銷燬的方法,進行配置驗證
bean書寫
單例:
建立:當容器一載入,就會建立
存在:只要容器存在,物件就會存在
銷燬:容器銷燬,物件就銷亡
applicationContext.xml配置
執行結果
多例:
建立:每次使用時,建立物件
活著:只要物件在使用中,就一直存在
銷燬:當物件長時間不使用,並且也沒有其他的物件引用,將由垃圾回收器進行回收
applicationContext.xml配置
結果:
銷燬方法沒有執行,原因是因為spring不知道什麼時候次物件不被使用
Spring的IOC思想
依賴注入的兩種方式(非註解版):
- 通過set方式進行注入
涉及的標籤:property
標籤屬性:
name:指定set方法的名稱
===================上面指定給哪個引數賦值,下面兩個是賦值的內容===================
value:指定基本資料型別或String型別的資料
ref:指定其他的bean類資料
標籤出現的位置:
寫在bean標籤裡面
2.通過建構函式注入
涉及的標籤:constructor-arg
標籤屬性:
type:指定引數的型別
index:指定引數的索引位置,從0開始
name:指定引數的名稱,(一般使用)
===================上面三個是給哪個引數賦值,下面兩個是賦值的內容===================
value:指定基本資料型別或String型別的資料
ref:指定其他的bean類資料
標籤出現的位置:
寫在bean標籤裡面
通過set方法注入複雜型別(結構相同,標籤可以互換)
list/set/array
map/props
基於註解的IOC
- 用於建立bean物件
@Component
作用:相當於在applicationContext.xml中配置了一個bean標籤;
可以出現的位置:類上面
屬性: value :指的是 bean的id,當不寫的時候,預設是當前類名,首字母小寫
由此註解衍生三個註解:
@Repository: 一般用在持久層
@Service: 一般用在業務層
@Controller: 一般用在表現層
- 注入資料型別
@Autowired:
作用:自動按照型別注入。只要有唯一的型別匹配就可以注入成功。如果注入的bean容器中符合的型別不唯一的時候,就會將變數名作為bean的id,在容器中查詢,如果找到的話,也是可以注入成功,如果沒有,就會丟擲異常
原理:首先①根據型別去匹配,看是否有符合型別的bean物件;
如果存在,且存在多個,再根據變數的名字去跟符合型別的物件的bean的id名字是否相同,如果都不同,則丟擲異常,
@Qualifier:
作用:在自動按照型別注入的基礎上,按照bean的id進行注入;在跟類成員注入資料時,此註解需要和@Autowired配合使用,不可以獨立使用;但是再給方法的形參注入資料時,可以獨立使用;
屬性:value:用於指定bean的id
@Resource(name= " "):
作用:直接按照bean的id注入
屬性:name:用於指定bean的id
以上的註解適用於注入其他bean型別。用於注入基本型別和String型別,需要使用@Value註解===
@Value:
作用:用於注入基本型別和String型別資料,可以藉助spring的el表示式讀取properties檔案的配置
屬性:value:用於指定注入的資料的值
取消xml配置檔案,編寫配置類
視屏截圖
spring整合Junit步驟
-
第一步:新增spring-test-4.2.4RELEASE依賴
-
第二步 :使用@RunWith註解;替換junit
使用SpringJunit4ClassRunner -
第三步:在測試類上面新增ContextConfiguration註解 純註解的使用 ,使用class屬性; class={位元組碼物件}
有xml配置的,使用locations屬性; locations= {""}