spring——依賴注入的三種方式
阿新 • • 發佈:2020-07-27
1 構造器注入(與構造器有直接關係)
-
預設無參構造
-
3種構造方式:通過
<contructor-arg>
呼叫類中的構造器-
下標
<bean id="userService" class="com.guan.service.UserServiceImpl"> <constructor-arg index="0" ref="apple"></constructor-arg> </bean>
-
型別
<bean id="userService" class="com.guan.service.UserServiceImpl"> <constructor-arg type="com.guan.dao.Fruit" ref="apple"></constructor-arg> </bean>
-
引數名(推薦使用)
<bean id="userService" class="com.guan.service.UserServiceImpl"> <constructor-arg name="fruit" ref="apple"></constructor-arg> </bean>
-
-
總結:
(1).所有例項在配置檔案載入時完成初始化
(2).一個類在一個容器中只有一個例項(預設是單例模式)
2 set注入(重點,與set方法有直接關係)
-
依賴注入的概念:
- 依賴: bean物件的建立依賴於容器
- 注入:bean物件中的所有屬性,由容器注入
-
測試環境搭建
public class Teacher {
private String name;
private int age;
}
```java public class Student { private String name; private Teacher teacher; private int age; private String wife; private Properties info; private List<String> bookList; private String[] friends; private Set<String> things;//compared to list collection,the item of set can't be repeat. private Map<String,Object> eductationHistory; }
幾個集合的區別:
(1).list和陣列:list是動態伸縮的,而陣列不是
(2).list和set:set不能重複,list可以重複
-
使用配置檔案進行配置
<bean id="teacher" class="com.guan.bean.Teacher"> <property name="name" value="蔡老師"></property> <property name="age" value="5"></property> </bean> <bean id="student" class="com.guan.bean.Student"> <property name="name" value="小明"></property> <!-- 1.class--> <property name="teacher" ref="teacher"></property> <property name="age" value="23"></property> <!-- 2.null--> <property name="wife"><null></null></property> <!-- 3.properties--> <property name="info"> <props> <prop key="喜歡的歌手">許嵩</prop> <prop key="可能喜歡的事">寫程式碼</prop> </props> </property> <!-- 4.List--> <property name="bookList"> <list> <value>飄</value> <value>百年孤獨(最近在看)</value> </list> </property> <!-- 5.array--> <property name="friends"> <array> <value>小王</value> <value>小紅</value> <value>小火</value> </array> </property> <!-- 6.set--> <property name="things"> <set> <value>敲程式碼</value> <value>敲程式碼</value> <value>敲程式碼</value> </set> </property> <!-- 7.Map--> <property name="eductationHistory"> <map> <entry key="小學" value="五里屯"></entry> <entry key="初中" value="張家口"></entry> <entry key="高中" value="三門星"></entry> </map> </property> </bean>
注意:
(1).空值是通過標籤
<null/>
(2).properties是通過標籤
<props/>
和<prop>
組合在一起配置的(3),map的value值寫在
<entry>
標籤間
3 其他方式
- p名稱空間(property):可以直接在
<bean>
的像id一樣賦值(通過set方法) - c名稱空間(construct):同上,只是使用的函式方式不同(通過construct方法)
注意:需要先匯入名稱空間