1. 程式人生 > 實用技巧 >Spring 依賴注入

Spring 依賴注入

spring中 的依賴往入

依賴注入:Dependency Injection

IOC的作用:

  • 降低程式間的耦合(依賴關係)

依賴關係的管理:

  • 以後都交給spring來維護

在當前類需要用到其他類的物件,由spring為我們提供,我們只需要在配置檔案中說明依賴關係的維護:就稱之為依賴注入。

依賴注入:

能注入的資料:有三類

  • 基本型別和String
  • 其他bean型別(在配置檔案中或者註解配置過的bean)
  • 複雜型別/集合型別

注入的方式:有三種

  • 第一種: 使用建構函式提供
  • 第二種:使用set方法提供
  • 第三種:使用註解提供(明天的內容)

使用建構函式提供

  建構函式注入:

    使用的標籤: constructor-arg

    標籤出現的位置: bean標籤的內部

  標籤中的屬性

  • type:用於指定要注入的資料的資料型別,該資料型別也是建構函式中某個或某些引數的型別
  • index:用於指定要注入的資料給建構函式中指定索引位置的引數賦值。索弓的位置是從0開始
  • name:用於指定給建構函式中指定名稱的引數賦值 常用的
  • value:用於提供基本型別和String型別的資料
  • ref:用於指定其他的bean型別資料。它指的就是在spring的Ioc核心容器中出現過的bean物件

  構造方法注入優勢:在獲取bean物件時,注入資料是必須的操作,否則無法完成建立物件

  構造方法注入弊端:改變了bean物件的例項化方式,使我們在建立物件時,如果用不到這些資料也必須要提供

<bean id="accountService" class=" com.zhiyou.service.impl.AccountServiceImpl">
<constructor-arg name "name" value="zxh"></constructor arg>
cconstructor-arg name =”age" value="18" ></ constructor- arg>
kconstructor-arg name ”birthday" ref:" now" ></ constructor arg>
</bean>

<bean id = "now" class="java.util.Date"></bean>

set方法注入

  涉及的標籤:property

  出現的位置:bean標籤內部

  標籤屬性:

    name:用於指定給建構函式中指定名稱的引數賦值 常用的

    value:用於提供基本型別和String型別的資料

    ref:用於指定其他的bean型別資料。它指的就是在spring的Ioc核心容器中出現過的bean物件

    set 方法的優勢:建立物件時沒有明確的限制,可以直接使用預設函式

    set 方法的弊端:如果有某個成員必須有值,則獲取物件是有可能set方法沒有執行

<bean id="accountService" class=" com.zhiyou.service.impl.AccountServiceImpl2">
<property name = "name"  value = "zxh" ></property>
<property name = "age"  value= "18" ></property>
<property name = "birthday"  ref= "now" ></property>
</bean>
<bean id = "now" class="java.util.Date"></bean>

複雜型別注入(陣列,集合,props)

用於給 list 結構集合注入的標籤 :list set array

用於給 map 結構集合注入的標籤:map props

結構相同,標籤可以互換

<bean id="accountService" class=" com.zhiyou.service.impl.AccountServiceImpl3">
<property name = "myStrs">   //陣列
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</property>
<property name = "myList"> //List集合
  <list>
    <value>AAA</value>
    <value>BBB</value>
    <value>CCC</value>
  </list>
</property>
<property name = "mySet"> //set集合
  <set>
    <value>AAA</value>
    <value>BBB</value>
    <value>CCC</value>
  </set>
</property>
<property name = "myMap"> //map集合
  <map>
    <entry key="testA" value="aaa"></entry>
    <entry key="testB"><value>BBB</value></entry>
    <entry key="testC" value="ccc"></entry>
  </map>
</property>
<property name = "myProps"> //prop集合
  <props>
    <prop key="testA">aaa</prop>
    <prop key="testB">bbb</prop>
    <prop key="testC">ccc</prop>
  </props>
</property>

</bean>