第四講 依賴注入(Dependency Injection,簡稱DI)

一、依賴注入-Dependency Injection

     依賴:指bean對象的創建依賴於容器;bean對象的依賴資源。
     注入:指bean對象依賴的資源由容器來設置和裝配。

二、Spring的注入

  1. 構造器注入

   見“第二講 IoC創建對象的三種方式”。

  1. setter注入(重點

   要求被注入的屬性必須有setter方法。setter方法的方法名由:set+屬性名首字母大寫。如果屬性是boolean類型,返回沒有getter方法是
   is。

          常量注入:

public class Student {
     
     private String name;
     
     public void setName(String name) {
           this.name = name;
     }
     
     public void show() {
           System.out.println("name=" + name);
     }
     
}

     <bean id="student" class="com.liujie.model.Student">
           <property name="name" value="張三"></property>
     </bean>

          bean注入(對象注入):

     public void setAddress(Address address) {
           this.address = address;
     }

     <bean id="address" class="com.liujie.model.Address">
           <property name="address" value="北京"></property>
     </bean>
     
     <bean id="student" class="com.liujie.model.Student">
           <property name="name" value="張三"></property>
           <property name="address" ref="address"></property>
     </bean>

          數組注入:

     public void setBooks(String[] books) {
           this.books = books;
     }

     <bean id="student" class="com.liujie.model.Student">
           <property name="name" value="張三"></property>
           <property name="address" ref="address"></property>
           <property name="books">
                <array>
                     <value>語文</value>
                     <value>英語</value>
                     <value>數學</value>
                </array>
           </property>
     </bean>

          List注入:

     public void setHobbies(List<String> hobbies) {
           this.hobbies = hobbies;
     }

           <property name="hobbies">
                <list>
                     <value>羽毛球</value>
                     <value>乒乓球</value>
                     <value>玻璃球</value>
                </list>
           </property>

          Map注入:

     public void setCards(Map<String, String> cards) {
           this.cards = cards;
     }

           <property name="cards">
                <map>
                     <entry key="中國銀行" value="15602822222222222"></entry>
                     <entry>
                           <key><value>建設銀行</value></key>
                           <value>6789990209833833</value>
                     </entry>
                </map>
           </property>

          Set注入:

     public void setGames(Set<String> games) {
           this.games = games;
     }

           <property name="games">
                <set>
                     <value>lol</value>
                     <value>dota</value>
                     <value>cs</value>
                </set>
           </property>

          Null注入:

     public void setWife(String wife) {
           this.wife = wife;
     }

           <property name="wife">
                <null></null>
           </property>

          Properties注入:

     public void setInfo(Properties info) {
           this.info = info;
     }

           <property name="info">
                <props>
                     <prop key="學號">2015052601</prop>
                     <prop key="sex"></prop>
                     <prop key="name">小明</prop>
                </props>
           </property>

          p命名空間注入:

public class User {
     
     private String name;
     private int age;
     
     public String getName() {
           return name;
     }
     public void setName(String name) {
           this.name = name;
     }
     public int getAge() {
           return age;
     }
     public void setAge(int age) {
           this.age = age;
     }
     
     @Override
     public String toString() {
           return "User [name=" + name + ", age=" + age + "]";
     }
     
}

<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd">

     <!-- p命名空間注入,屬性依然要設置setter方法 -->
     <bean id="user" class="com.liujie.model.User" p:name="李白" p:age="230"></bean>

          c命名空間注入:

public class User {
     
     private String name;
     private int age;
     
     public User() {
           super();
     }
     public User(String name, int age) {
           super();
           this.name = name;
           this.age = age;
     }
     
     @Override
     public String toString() {
           return "User [name=" + name + ", age=" + age + "]";
     }
     
}

<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:c="http://www.springframework.org/schema/c"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd">

     <!-- c命名空間注入要求有對應參數的構造方法 -->
     <bean id="user" class="com.liujie.model.User" c:name="杜甫" c:age="280"></bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章