SpringDI(Dependency Injection)
DI作用:因為IOC解除了程式間的依賴關系,是以DI就是weil維護程式間的依賴關系,稱:依賴注入
能注入的三類資料類型:
- 基本類型和String
- 其他bean類型(在配置檔案中或者注解配置過的bean)
- 複雜類型/集合類型
注入的三種方式:
使用構造函數注入
優勢: 可以實作,在擷取某對象時,注入資料時必須的操作,否則對象無法建立成功
弊端: 改變了bean對象的執行個體化方式,導緻我們在建立對象時,如果用不到這些屬性,也必須提供
<bean id="userService" class="com.xp.service.impl.UserServiceImpl">
<constructor-arg name="name" value="哈哈哈"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="date" ref="now"></constructor-arg>
</bean>
<bean id="now" class="java.util.Date"></bean>
- 參數說明:
- 一個constructor-arg标簽代表一個依賴
- constructor-arg屬性:
- type 用于指定要注入的資料類型,該資料類型也是構造函數中某個或某些參數的類型
- index 用于指定要注入的資料,給構造函數中指定索引位置的參數輔助,索引從0開始
- name 用于指定給構造函數中指定名稱的函數輔助(常用)
- 以上三個都是用于指定給構造函數中哪個參數指派
- value 用于提供基本類型和String類型的資料
- ref 用于指定其他bean類型資料,即在spring的IOC核心容器中配置的bean對象
-
使用set方法注入(常用)
優勢: 建立對象時沒有明确限制,可以直接使用預設構造函數
弊端: 無法實作讓某個屬性必須有值,則擷取對象是有可能set方法沒有執行
<bean id="userService" class="com.xp.service.impl.UserServiceImpl"> <property name="name" value="hhh"></property> <property name="age" value="17"></property> <property name="date" ref="now"></property> </bean> <bean id="now" class="java.util.Date"></bean>
- 參數說明:
- 一個property标簽代表一個依賴
- property屬性:
- name 用于指定給構造函數中指定名稱的函數輔助(常用)
- value 用于提供基本類型和String類型的資料x
- ref 用于指定其他bean類型資料,即在spring的IOC核心容器中配置的bean對象
- 參數說明:
-
使用注解注入
複雜類型注入
- 常用:List,Array,Set,Map,Propertise
- list,set,array标簽可以混用,map和props标簽可以混用,即結構相同,标簽可以互換,是以,隻需要記住兩個标簽即可
<bean id="userDao" class="com.xp.dao.impl.UserDaoImpl">
<property name="myList">
<list>
<value>213</value>
<value>2513</value>
<value>43</value>
<value>2613</value>
</list>
</property>
<property name="myStrs">
<array>
<value>324</value>
<value>324534</value>
<value>25654</value>
</array>
</property>
<property name="mySet">
<set>
<value>23</value>
<value>234</value>
<value>235</value>
<value>236</value>
</set>
</property>
<property name="myMap">
<map>
<entry key="3424" value="543534">
</entry>
<entry key="3453">
<value>3453</value>
</entry>
</map>
</property>
<property name="myProps">
<props>
<prop key="32243">fsdf</prop>
<prop key="45">fsd</prop>
<prop key="32543243">fsd</prop>
</props>
</property>
</bean>