Spring對bean的管理細節:
1.創建bean的三種方式: 1)使用默認構造函數創建。在spring的配置文件中bean標籤,配以id和class屬性之後,且沒有其他屬性和標籤時,採用的就是默認構造函數創建bean對象,此時如果類中沒有默認構造函數,則對象無法創建。
2)使用普通工廠中的方法創建對象(使用某個類中的方法創建對象,並存入spring容器)
3)使用工廠中的靜態方法創建對象(使用某個類中的靜態方法創建對象,並存入spring容器)
2.bean的作用範圍調整
bean標籤的scope屬性:
作用:用於指定bean的作用範圍
取值: 常用的就是單例的和多例的
singleton:單例(默認值)
prototype:多例的
request:作用於web應用的請求範圍
session:作用於web應用的會話範圍
global-session:作用於集羣環境的會話範圍(全局會話範圍),當不是集羣環境時,它就是session
3.bean對象的生命週期
單例對象:
出生:當容器創建時對象出生
活着:只要容器還在,對象一直活着
死亡:容器銷燬,對象消亡
總結:單例對象的生命週期和容器相同
多例對象:
出生:當使用對象時spring框架 為我們創建
活着:對象只要是在使用過程中就一直活着。
死亡:當對象長時間不用,且沒有別的對象引用時,由java的垃圾回收器回收
spring中的依賴注入
依賴注入:Dependency Injection
IOC的作用:降低程序間的耦合(依賴關係) 依賴關係的管理:以後都交給spring來維護
在當前類需要用到其他類的對象,由spring為我們提供,我們只需在配置文件中説明
依賴關係的維護:就稱之為依賴注入
依賴注入:能注入的數據:有三類:
基本類型和String
其他bean類型(在配置文件中或者註解配置過的bean)
複雜類型/集合類型
注入的方式:有三種
第一種:使用構造函數提供
第二種:使用set方法提供
第三種:使用註解提供
<!--構造函數注入:
使用的標籤:constructor-arg
標籤出現的位置:bean標籤的內部
標籤中的屬性:
type:用於指定要注入的數據的數據類型,該數據類型也是構造函數中某個或某些參數的類型
index:用於指定要注入的數據給構造函數中指定索引位置的參數賦值。索引位置從0開始。
name:用於指定給構造函數中指定名稱的參數賦值 常用的
========以上三個用於指定給構造函數中哪個參數賦值==============
value:用於提供基本類型和String類型的數據
ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象
優勢:在獲取bean對象時,注入數據是必須的操作,否則對象無法創建成功。
弊端:改變了bean對象的實例化方式,使我們在創建對象時,如果用不到這些數據,也必須提供。
-->
<!--set方法注入 更常用的方式
涉及的標籤:property
出現的位置:bean標籤內部
標籤的屬性:
name:用於指定注入時所調用的set方法名稱
value:用於提供基本類型和String類型的數據
ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象
優勢:
創建對象時沒有明確的限制,可以直接使用默認構造函數
弊端:
如果有某個成員必須有值,則獲取對象時有可能set方法沒有執行。
-->
<!--複雜類型的注入/集合類型的注入
用於給List結構集合注入的標籤:
list array set
用於給Map結構集合注入的標籤:
map props
結構相同,標籤可以互換
-->