spring的自動裝配 spring IOC容器可以自動裝配bean,只需要在bean的autowire屬性指定自動裝配的模式。 模式: 1、 byType :根據類型自動裝配。根據bean的類型和當前bean的屬性的類型進行自動裝配,若IOC容器中有1個以上的類型匹配的bean,則拋出異常; 2、 ...
spring的自動裝配
spring IOC容器可以自動裝配bean,只需要在bean的autowire屬性指定自動裝配的模式。
模式:
1、byType:根據類型自動裝配。根據bean的類型和當前bean的屬性的類型進行自動裝配,若IOC容器中有1個以上的類型匹配的bean,則拋出異常;
2、byName:根據名稱自動裝配,byname根據bean的名字和當前bean的setter風格的屬性名進行裝配,也就是說bean的id和類中的set方法的名字相對應,如類中的set方法是setUser(),則其對應xml文件配置的bean的id=“user”,若id="user2",則自動裝配失敗,獲取不到對應bean的值,所以我們常常把bean的id寫成對應類名的首字母小寫;
3、constructor: 通過構造器自動裝配(不推薦使用)。
配置spring自動裝配的xml文件
<bean id="car" class="com.test.autowire.Car"
p:name="ddd" p:price="20000"></bean>
<!-- 在自動裝配使用byType時,同時有多個類型匹配的bean會拋出異常
<bean id="car2" class="com.test.autowire.Car"
p:name="dazhong" p:price="20000"></bean> -->
<bean id="address" class="com.test.autowire.Address" p:city="beijing"
p:no="23"></bean>
<!-- 在自動裝配使用byName時,id沒有對應的setter方法,則獲取不到配置的bean值
<bean id="address1" class="com.test.autowire.Address"
p:city="beijing" p:no="23"></bean> -->
<!--為person bean添加自動裝配 autowire="byType"或者autowire="byName" -->
<bean id="person" class="com.test.autowire.Person" p:name="fei"
autowire="byName"></bean>
運行效果
1、成功運行:
2、在自動裝配使用byType時,同時有多個類型匹配的bean會拋出錯誤異常信息
3、在自動裝配使用byName時,id沒有對應的setter方法,則獲取不到配置的bean值
缺點:
1、在bean的配置文件設置autowire屬性進行自動裝配,會裝配所有bean的屬性,若希望只裝配個別的屬性就顯得不夠靈活;
2,、不能夠同時裝配byName 和byType所以在項目中很少使用自動裝配,但是在整合框架的時候能夠用到。
bean的繼承和依賴關係
繼承:被繼承的bean叫做父bean,繼承的叫做子bean。
1、子bean從父bean繼承配置,包括屬性配置,子bean也可以覆蓋從父bean繼承過來的配置;
2、父bean作為模板,設置abstract屬性為true,這樣就不能實例化這個bean,並不是所有的屬性被繼承,如abstract,autowire等不會被繼承;
3、可以忽略父bean的class屬性,讓子bean指定自己的類,而共用相同的屬性配置,此時abstract 必須為true.
配置spring繼承和依賴的xml文件
<!-- 抽象bean:bean的abstract屬性為true的bean,這樣的bean不能被實例化,只能用來繼承配置; 若某一個的bean的class屬性沒有指定,則該bean必須是一個抽象bean -->
<bean id="address" p:city="beijing" p:no="23" abstract="true"></bean>
<!-- bean配置的繼承:使用bean的parent屬性指定繼承那個bean的配置 -->
<bean id="address2" class="com.test.autowire.Address" parent="address"
p:no="33"></bean>
<bean id="car" class="com.test.autowire.Car" p:name="ddd" p:price="20000"></bean>
<!--bean的依賴:depends-on屬性,前置依賴的bean在本bean實例化之前創建好,若沒有創建好則拋出異常 -->
<bean id="person" class="com.test.autowire.Person" p:name="qin"
p:address-ref="address2" depends-on="car"></bean>
運行效果
1、成功運行:
2、前置依賴的bean在本bean實例化之前沒有創建好,拋出異常錯誤信息