IOC核心理論

1.實體Bean的構建

a.基於Class構建

b.構造方法構建

c.靜態工廠方法創建

d.FactoryBean創建

2.1.基於Class構建

<bean class="com.tuling.spring.HelloSpring"/>

這是最常見的方法,其原理是在spring底層會基於class屬性通過反射進行構建

2.2.構造方法構建

<bean class="com.tuling.spring.HelloSpring">

    <constructor-arg name="name" type="java.lang.String" value="tuling"/>

    <constructor-arg index="1" type="java.lang.String" value="sex" />

</bean>

如果需要基於參數構建,就採用構造方法構建,其對應屬性如下:

name:構造方法參數變量名稱

type:參數類型

index:參數索引,從0開始

ref:引用容器的其它對象

2.3.靜態工廠方法創建

<bean class="com.tuling.spring.HelloSpring" factory-method="build">

    <constructor-arg name="type" type="java.lang.String" value="B"/>

 </bean>

此方法就是在一個HelloSpring類裏定義一個build靜態方法,通過參數不同返回不 同對象。

如果你正在對一個對象進行A/B測試,就可以採用靜態工廠方法的方式創建,基於策略創建不同的對象或填充不同的屬性。

該模式下必須創建一個靜態工廠方法,並且方法返回該實例,spring會調用該靜態方法創建對象

2.4.FactoryBean創建

<bean id="driver" class="com.tuling.spring.DriverFactoryBean">

    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306"/>

</bean>

指定一個Bean工廠來創建對象,對象構建初始化完全交給該工廠來實現,配置Bean時指定該 工廠類的類名。

要定義一個實現了FactoryBean接口的對象,實現該接口的方法。

 

3.bean的基本特性

a.作用範圍

b.生命週期

c.裝載機制

3.1.作用範圍

3.2.生命週期

3.3.加載機制

4.依賴注入

試想IOC中如果沒有依賴注入,那這個框架就只能幫助我們構建一些簡單的Bean,而 之前說的複雜Bean的構建問題將無法解決,Spring這個框架不可能 會像現在這樣成功。spring中ioc如何依賴注入呢。有以下幾種方式 

a.set方法注入

b.構造方法注入

c.自動注入(byName,byType)

d.方法注入(looup-method)

4.1.set方法注入

<bean class="com.tuling.spring.HelloSpring">

     <property name="find" ref="fineSpring"/>

</bean>

4.2.構造方法注入

<bean class="com.tuling.spring.HelloSpring">

     <constructor-arg name="fine">

              <bean class="com.tuling.spring.FineSpring"/>

     </constructor-arg>

</bean>

4.3.自動注入(byName\byType\constructor)

<bean id="helloSpringAutowireConstructor" class="tuling.spring.HelloSpring" autowire="byName"/>

byName:基於變量名與bean名相同作爲依據插入

byType:基於變量類別與bean名稱作爲依據插入

constructor:基於IOC中bean與構造方法進行匹配(語義模糊,不推薦)

4.4.依賴方法注入(lookup-method)

當一個單例的Bean,依賴於一個多例的Bean,用常規方法只會被注入一次,如果每次都想要獲取一個全新實例就可以採用lookup-method方法來實現 。

該操作的原理是基於動態代理技術,重新生成一個繼承至目標類,然後重寫抽象方法達到注入目的。抽象方法FineSpring是由spring框架實現。

前面所說單例Bean依賴多例Bean這種情況也可以通過實現ApplicationContextAware、BeanFactoryAware接口來獲取BeanFactory實例,從而可以直接調用getBean方法獲取新實例,推薦使用該方法,相比lookup-mehtod語義邏輯更清楚一些。

 

 

 

 

 

 

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