1. 程式人生 > 遊戲 >[F5]進取遊戲釋出會明晚7:30舉行 《劍俠圖》它來了

[F5]進取遊戲釋出會明晚7:30舉行 《劍俠圖》它來了

springIOC

IOC建立物件方式

1. 通過無參構造方法建立

  1. User.java (預設有無參構造方法)
public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("我的名字是:"+name);
    }
}
  1. beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user" class="com.dingcd.pojo.User">
        <property name="name" value="dingcd"/>
    </bean>

</beans>
  1. 測試類
@Test
public void test1(){
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    //在執行getBean的時候, user已經建立好了 , 通過無參構造
    User user = context.getBean("user", User.class);
    //呼叫物件的方法
    user.show();
}

結果可以發現,在呼叫show方法之前,User物件已經通過無參構造初始化了!

2. 通過有參構造方法建立

  1. UserT.java
public class UserT {


    private String name;

    public UserT(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("我的名字是:"+name);
    }
}
  1. beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 第一種根據index引數下標設定 -->
    <bean id="userT" class="com.dingcd.pojo.UserT">
        <constructor-arg index="0" value="dingcd"/>
    </bean>

    <!-- 第二種根據引數名字設定 -->
    <bean id="userT" class="com.dingcd.pojo.UserT">
        <!-- name指引數名 -->
        <constructor-arg name="name" value="dingcd"/>
    </bean>

    <!-- 第三種根據引數型別設定 -->
    <bean id="userT" class="com.dingcd.pojo.UserT">
        <constructor-arg type="java.lang.String" value="dingcd"/>
    </bean>

</beans>
  1. 測試類
@Test
public void test2(){
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    UserT user =  context.getBean("userT",UserT.class);
    user.show();
}

3. 別名

alias 設定別名 , 為bean設定別名 , 可以設定多個別名

<!--設定別名:在獲取Bean的時候可以使用別名獲取-->
<alias name="userT" alias="userNew"/>

4.import

團隊的合作通過import來實現 .

<import resource="{path}/beans.xml"/>

IOC注入方式

測試pojo類 :

Address.java

public class Address {
 
     private String address;
 
     public String getAddress() {
         return address;
    }
 
     public void setAddress(String address) {
         this.address = address;
    }
 }

Student.java

package com.dingcd.pojo;  import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set;  public class Student {      private String name;     private Address address;     private String[] books;     private List<String> hobbys;     private Map<String,String> card;     private Set<String> games;     private String wife;     private Properties info;      public void setName(String name) {         this.name = name;    }      public void setAddress(Address address) {         this.address = address;    }      public void setBooks(String[] books) {         this.books = books;    }      public void setHobbys(List<String> hobbys) {         this.hobbys = hobbys;    }      public void setCard(Map<String, String> card) {         this.card = card;    }      public void setGames(Set<String> games) {         this.games = games;    }      public void setWife(String wife) {         this.wife = wife;    }      public void setInfo(Properties info) {         this.info = info;    }      public void show(){         System.out.println("name="+ name                 + ",address="+ address.getAddress()                 + ",books="        );         for (String book:books){             System.out.print("<<"+book+">>\t");        }         System.out.println("\n愛好:"+hobbys);          System.out.println("card:"+card);          System.out.println("games:"+games);          System.out.println("wife:"+wife);          System.out.println("info:"+info);     } }

1.常量注入

<bean id="student" class="com.dingcd.pojo.Student">    <property name="name" value="小明"/></bean>

2.Bean注入

 <bean id="addr" class="com.dingcd.pojo.Address">     <property name="address" value="重慶"/> </bean>  <bean id="student" class="com.dingcd.pojo.Student">     <property name="name" value="小明"/>     <property name="address" ref="addr"/> </bean>

3.陣列注入

 <bean id="student" class="com.dingcd.pojo.Student">     <property name="name" value="小明"/>     <property name="address" ref="addr"/>     <property name="books">         <array>             <value>西遊記</value>             <value>紅樓夢</value>             <value>水滸傳</value>         </array>     </property> </bean>

4.List注入

<property name="hobbys">     <list>         <value>聽歌</value>         <value>看電影</value>         <value>爬山</value>     </list> </property>

5.Map注入

<property name="card">     <map>         <entry key="中國郵政" value="456456456465456"/>         <entry key="建設" value="1456682255511"/>     </map> </property>

6.set注入

<property name="games">     <set>         <value>LOL</value>         <value>BOB</value>         <value>COC</value>     </set> </property>

7.Null注入

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

8.Properties注入

<property name="info">     <props>         <prop key="學號">20190604</prop>         <prop key="性別">男</prop>         <prop key="姓名">小明</prop>     </props> </property>

9.p命名和c命名注入

User.java :【注意:這裡沒有有參構造器!】

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

1、P名稱空間注入 : 需要在標頭檔案中加入約束檔案

 匯入約束 : xmlns:p="http://www.springframework.org/schema/p"  <!--P(屬性: properties)名稱空間 , 屬性依然要設定set方法--> <bean id="user" class="com.dingcd.pojo.User" p:name="達達" p:age="18"/>

2、c 名稱空間注入 : 需要在標頭檔案中加入約束檔案

 匯入約束 : xmlns:c="http://www.springframework.org/schema/c" <!--C(構造: Constructor)名稱空間 , 屬性依然要設定set方法--> <bean id="user" class="com.dingcd.pojo.User" c:name="達達" c:age="18"/>

發現問題:爆紅了,剛才我們沒有寫有參構造!

解決:把有參構造器加上,這裡也能知道,c 就是所謂的構造器注入!

測試程式碼:

 @Test public void test02(){     ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");     User user = context.getBean("user",User.class);     System.out.println(user); }