spring IOC和DI

spring IOC and DI
一、IOC和DI的區別:
IOC:對象的管理權由spring容器掌握(管理權限包括:對象的建立時間點、建立方式以及對象屬性的管理);
DI:spring操做對象屬性的時使用的方式就是DI技術spring

二、DI方式:spring操做對象屬性的時間點通常都是在對象建立的時候,操做的方式是可配置的,主要有4種方式:no(default)、byName、byType、constructor。
no方式:這是spring的默認方式,這種方式spring不會對對象的屬性作任何的操做,除非配置了<property>屬性,不然spring不會自動的在當前context去找須要的值。
byName方式:spring會在當前的context找到和對象屬性名稱相同的值進行注入,若是找到的值的類型和屬性的值類型不一致就會報:"Cannot convert value of type"錯誤。
byType方式:spring會在當前的context找到和對象屬性類型相同的值進行注入,若是找到值不止一個就會報"No unique bean of type"錯誤。
constructor方式:這種方式比較特殊,這是一個顯示的依賴關係,對象必須有有參構造方法,spring會根據參數的名稱去context找對應的值進行注入,改方式不能被子類繼承。

三、IOC用法:
3.一、建立子類對象,給其指定父類對象,若是不指定那麼父類會從新實例化,不會再當前容器中查找。
<bean name="student" class="com.xxw.pojo.Student" parent="persion">
<property name="name" value="this a student"/>
</bean>
<bean name="persion" class="com.xxw.pojo.Persion" autowire="byName" >
<property name="persionName" value="this is two persion"/>
</bean>
其餘兩種:能夠經過靜態工廠方法或者實例工廠的方法this

四、spring元數據配置中的p標籤和c標籤
使用p標籤須要加入xml:xmlns:p="http://www.springframework.org/schema/p"
<bean name="animal" class="com.xxw.pojo.Cat" p:name="this is cat" />
等價於:
<bean name="animal" class="com.xxw.pojo.Cat">
<property name="name" value="this is cat"/>
</bean>
使用c標籤須要加入xml: xmlns:c="http://www.springframework.org/schema/c"
這個標籤的使用相似於:<constructor-arg></constructor-arg>標籤xml

相關文章
相關標籤/搜索