# bean的自動裝配 ###### tags: `Spring-bean的自動裝配` * 自動裝配是spring滿足bean依賴的一種方式 * Spring會在上下文裝自動尋找,並自動給bean裝配屬性 在Spring中,有三種裝配的方式 1. 在xml中顯式的配置 2. 在java中顯式配置 3. 隱式的自動裝配bean【重要】 ### 測試 #### 環境搭建:一個人有兩個寵物 ```xml= <?xml version="1.0" encoding="UTF-8"?> <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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="cat" class="com.kuang.pojo.Cat"/> <bean id="dog" class="com.kuang.pojo.Dog"/> <bean id="people" class="com.kuang.pojo.People"> <property name="name" value="秦心"/> <property name="dog" ref="dog"/> <property name="cat" ref="cat"/> </bean> </beans> ``` ### 自動裝配 #### byName:會自動在容器上下文中查找,和自己對象ser方法後面的值對應的bean-id **成功案例** ```xml= <bean id="cat" class="com.kuang.pojo.Cat"/> <bean id="dog" class="com.kuang.pojo.Dog"/> <bean id="people" class="com.kuang.pojo.People" autowire="byName"> <property name="name" value="秦心"/> </bean> ``` ![](https://i.imgur.com/Xl7Gpqk.png) **失敗案例:因為people找不到bean id="dog"** ```xml= <bean id="cat" class="com.kuang.pojo.Cat"/> <bean id="dog222" class="com.kuang.pojo.Dog"/> <bean id="people" class="com.kuang.pojo.People" autowire="byName"> <property name="name" value="秦心"/> </bean> ``` ![](https://i.imgur.com/7PCHMHM.png) #### ByType:會自動在容器上下文中查找,和自己對象屬性類型相同的bean-id(必須保證類全局唯一) **成功案例** ```xml= <bean id="cat" class="com.kuang.pojo.Cat"/> <bean id="dog" class="com.kuang.pojo.Dog"/> <bean id="people" class="com.kuang.pojo.People" autowire="byType"> <property name="name" value="秦心"/> </bean> ``` **失敗案例** 因為有兩個重複的類 ```xml= <bean id="cat" class="com.kuang.pojo.Cat"/> <bean id="dog" class="com.kuang.pojo.Dog"/> <bean id="dog1" class="com.kuang.pojo.Dog"/> <bean id="people" class="com.kuang.pojo.People" autowire="byType"> <property name="name" value="秦心"/> </bean> ``` **可以只留類** ```xml= <bean class="com.kuang.pojo.Cat"/> <bean class="com.kuang.pojo.Dog"/> <bean id="people" class="com.kuang.pojo.People" autowire="byType"> <property name="name" value="秦心"/> </bean> ``` ### 小節: * byName的時候,需要保證所有bean的id唯一,並且這個bean需要和自動注入的屬性的set方法的值一致 * byType的時候,需要保證所有bean的class唯一,並且這個bean需要和自動注入的屬性的類型一致 ![](https://i.imgur.com/OuW1a0u.png)