SpringDI(Dependency Injection) DI作用:因為IOC解除了程式間的依賴關係,所以DI就是weil維護程式間的依賴關係,稱:依賴註入 能註入的三類數據類型: 基本類型和String 其他bean類型(在配置文件中或者註解配置過的bean) 複雜類型/集合類型 註入的三種方 ...
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>