Spring IOC--控制反轉

爪哇島的流浪漢發表於2018-07-16

1.Spring IOC
IOC全稱Inversion Of Control,被翻譯成控制反轉
控制反轉是指程式中物件的獲取方式發生反轉,由最初的NEW方式
建立,轉變為由第三方框架建立,注入(DI),它降低物件之間的
耦合度


Spring容器採用DI方式實現IOC控制,IOC是Spring框架的基礎和
核心

DI全稱是Dependency Injection,被翻譯成依賴注入,依賴注入的
基本原理是將一起工作具有關聯關係的物件通過方法引數傳入,建
立關係,因此容器的工作就是建立Bean物件時注入依賴關係


IOC是一種思想,而DI是實現IOC的主要技術途徑

DI主要有兩種注入方式,即Setter注入和構造器注入


1)Setter注入
public class B{}

public class A{
private B b;

public void setB(B b){
this.b = b;
}
}

2)構造器注入
public class B{}

public class A{
private B b;

public A(B b){
this.b = b;
}

}


自動裝配
Spring容器可以自動裝配(autowire)相互協作Bean之間的關聯
關係,autowire可以針對單個Bean進行設定,方便之處在於減少
XML注入配置


在配置檔案中,可以在<bean>標籤中使用autowire屬性指定自動
裝配的規則,一共有三種型別值


byName:根據屬性名自動裝配,此選項將檢查容器,根據名字查
找與屬性名一致的Bean,然後將其與屬性自動裝配(
setter注入)
byType:如果容器中存在一個與指定屬性型別相同的Bean,則將
與此屬性自動裝配(setter注入)
constructor:與byType方式類似,不同之處在於它應用於構造器

方式(構造器注入)

 

2.引數值注入
1)注入基本值
<value>標籤可以通過字屬性符串指定或構造器引數的值,容器
將字串從java.lang.String型別轉換為實際的屬性或構造器參
數型別,然後給Bean物件注入


2)注入Bean物件
注入外部Bean(引用方式,方便重用)


3)注入集合
通過<list>,<set>,<map>,<props>標籤來定義與Java中
對應的List,Set,Map及Properties的屬性值


List,Set,Map及Properties都可以採用引入方式,<util:list>
<util:set>,<util:map>,<util:properties>


4)注入Spring表示式
Spring表示式語言,和EL表示式在語法上很相似,可以讀取一
個Bean物件或集合中的資料


5)注入NULL或空字串
Spring將屬性的空引數當做空String
<bean>
<property name="name" value=""/>
</bean>

如果需要注入NULL,可以使用<null>標籤
<bean>
<property name="name">
<null/>
</property>
</bean>

3.基於註解依賴注入
具有依賴關係的Bean物件,可以使用以下任意一種註解實現注入

@Autowired/@Qualifer
可以處理構造器注入和Setter注入
@Autowired寫在構造器或set方法前,宣告需要為其注入Bean,
@Qualifer寫在引數前面,宣告注入Bean的id

@Autowired/@Qualifer也可以寫在屬性上,作用和寫在set方
法上類似,但是隻會執行一行程式碼(賦值程式碼)


注意:注入物件是單例時,@Qualifer可省略,此時Spring按照
引數型別匹配引數值

@Resource
只能處理Setter注入

@Resource也可以寫在屬性上,作用和寫在set方法上類似,但
是隻會執行一行程式碼(賦值程式碼)

注意:注入物件是單例時,(name="識別符號")可省略,此時
Spring按照引數型別匹配引數值

問題:
@Autowired與@Resource的區別

注入基本值或Spring表示式
@Value註解可以注入基本值或Spring表示式值
語法:
@Value("張三")
@Value("#{user.name}")

相關文章