您好,登錄后才能下訂單哦!
Spring中裝配Bean的方法有哪些?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
spring的自動裝配功能的定義:無須在Spring配置文件中描述javaBean之間的依賴關系(如配置<property>、<constructor-arg>)。IOC容器會自動建立javabean之間的關聯關系。
如果沒有采用自動裝配的話,手動裝配我們通常在配置文件中進行實現:一下代碼就是手動裝配:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="customerDAO" class="com.hebeu.customer.dao.JdbcCustomerDAO"> <property name="dataSource" ref="dataSource" /> </bean> </beans>
通過<property name="dataSource" ref="dataSource" />向customerDAO的bean中注入了dataSource
在Spring框架,可以用 auto-wiring 功能會自動裝配Bean。要啟用它,只需要在 <bean>定義“autowire”屬性。
<bean id="customer" class="com.yiibai.common.Customer" autowire="byName" />
在Spring中,支持 5 自動裝配模式。
第一種自動裝配【根據屬性名稱自動裝配】
package com.hebeu.model; public class Customer { private Address address; public Customer() { } public Customer(int id, Address address) { super(); this.address = address; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
package com.hebeu.model; public class Address { private String fulladdress; public Address(){ } public Address(String addr){ this.fulladdress = addr; } public String getFulladdress() { return fulladdress; } public void setFulladdress(String fulladdress) { this.fulladdress = fulladdress; } }
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="customer" class="com.hebeu.model.Customer" autowire="byName"></bean> <bean id="address" class="com.hebeu.model.Address"> <property name="fulladdress" value="YiLong Road, CA 188"></property> </bean> </beans>
這樣就將address注入到Customer中。這就是自動注入ByName.在Customer bean中公開了一個屬性address,Spring容器會找到address bean,并且裝配。這里必須要注意,Customer中要被注入的bean的set方法要求必須是public的,否則會報空指針異常。還有配置的bean的id必須和Customer中聲明的變量名相同。
第二種自動裝配【根據數據類型自動裝配】
聲明的倆個bean同樣為Customer以及Address,將applicationContext.xml轉換為這樣的就是實現根據數據類型進行自動裝配。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="customer" class="com.hebeu.model.Customer" <strong><span >autowire="byType"</span></strong>></bean> <bean id="bean1" class="com.hebeu.model.Address"> <property name="fulladdress" value="YiLong Road, CA 188"></property> </bean> </beans>
類型自動裝配的意思是如果一個bean的數據類型與其他的bean屬性的數據類型相同,將會自動兼容裝配它。當然要求只能配置一個某一個類型的bean.如果配置成這樣,那么是會出錯的。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="customer" class="com.hebeu.model.Customer" autowire="byType"></bean> <bean id="bean1" class="com.hebeu.model.Address"> <property name="fulladdress" value="YiLong Road, CA 188"></property> </bean> <bean id="bean2" class="com.hebeu.model.Address"> <property name="fulladdress" value="YiLong Road, CA 188"></property> </bean> </beans>
第三種自動裝配【根據構造方法自動裝配】
案例同上,將applicationContext.xml轉換為如下,就實現了按照構造方法自動裝配:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="customer" class="com.hebeu.model.Customer"> <!-- 構造方法的參數 --> <constructor-arg> <ref bean="bean1"/> </constructor-arg> </bean> <bean id="bean1" class="com.hebeu.model.Address"> <property name="fulladdress" value="YiLong Road, CA 188"></property> </bean> </beans>
它實際上是構造函數的參數類型自動裝配。這意味著如果一個bean的數據類型與其他bean的構造器參數的數據類型是相同的,那么就自動裝配。
看完上述內容,你們掌握Spring中裝配Bean的方法有哪些的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。