1. 程式人生 > >Spring入門知識 ———— Spring_IOC屬性常用注入方式

Spring入門知識 ———— Spring_IOC屬性常用注入方式

一、引言

如何在IOC容器中配置Bean,這個是每個小夥伴得掌握的。在之前HelloWorld也有接觸過,那麼本章來介紹一下IOC常用的注入方式。一般來說常用的屬性注入、構造器注入的方式,本章會通過一個例項來講解。

Car : 汽車類,汽車包含多個屬性,品牌、起源地、價格。具體內容如下

People:人,包含姓名,和一輛車。具體內容如下

建立applicationContext-beans.xml檔案

/**
 * 汽車類
 */
public class Car {

    /**
     * 汽車品牌
     */
    private String brand;
    /**
     * 汽車產地
     */
    private String origin;
    /**
     * 汽車價格
     */
    private int price;

    public Car() {}

    public Car(String brand, String origin, int price) {
        this.brand = brand;
        this.origin = origin;
        this.price = price;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public void setOrigin(String origin) {
        this.origin = origin;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    /**
     * 列印
     * @return
     */
    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", origin='" + origin + '\'' +
                ", price=" + price +
                '}';
    }
}
/**
 * 人
 */
public class People {

    private String name;

    private Car cat;

    public People() {}

    public People(String name, Car cat) {
        this.name = name;
        this.cat = cat;
    }

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

    public void setCat(Car cat) {
        this.cat = cat;
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", cat=" + cat +
                '}';
    }
}

二、構造器注入

<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-4.0.xsd">

      <!--  Car : 通過構造器進行屬性注入 -->
       <bean id="car" class="com.spring.two.Car">
           <constructor-arg name="origin" value="未知"></constructor-arg>
           <constructor-arg name="brand" value="保時捷"></constructor-arg>
           <!--也可以把value當作子節點-->
           <constructor-arg name="price">
               <value>1100000</value>
           </constructor-arg>
       </bean>

        <!--  People : 通過構造器進行屬性注入 -->
       <bean id="people" class="com.spring.two.People">
           <constructor-arg name="name" value="Tom"></constructor-arg>

           <!-- 在這裡Car是一個物件,可以使用ref來引用上面的car -->
           <!--<constructor-arg name="car" ref="car"></constructor-arg>-->

           <constructor-arg name="car">
              <!-- 也可以定義一個內部Bean,內部Bean可以不需要指定id-->
               <bean class="com.spring.two.Car">
                   <constructor-arg name="origin" value="未知"></constructor-arg>
                   <constructor-arg name="brand" value="保時捷"></constructor-arg>
                   <constructor-arg name="price" value="1100000"></constructor-arg>
               </bean>
           </constructor-arg>
       </bean>

</beans>

三、屬性注入

<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-4.0.xsd">


      <!--
             重點:如果是通過Setter方法注入的,property中的name屬性值,是和每一個Set方法後面的名字對應的,而不是和屬性名對應
             但是我們Setter方法都是採用自動生成的,所以一般Setter方法都是和屬性名對應的
      -->

      <!--  Car : 通過Setter方法注入屬性 -->
       <bean id="car" class="com.spring.two.Car">
           <property name="brand" value="保時捷"></property>
           <property name="origin" value="未知"></property>
           <property name="price" value="1100000"></property>
       </bean>

        <!--  People : 通過Setter方法注入屬性 -->
       <bean id="people" class="com.spring.two.People">
            <property name="name" value="Tom"></property>

            <!-- 引用物件-->
           <!-- <property name="cat" ref="car"></property>-->

           <!--同樣也可以建立內部bean-->
           <property name="cat">
               <bean class="com.spring.two.Car">
                   <property name="brand" value="保時捷"></property>
                   <property name="origin" value="未知"></property>
                   <property name="price" value="1100000"></property>
               </bean>
           </property>
       </bean>

</beans>

四、最後執行結果

public class Main {

    public static void main(String[] args) {
        BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext-beans.xml");
        Car car = (Car) beanFactory.getBean("car");
        System.out.println(car.toString());

        People people = (People) beanFactory.getBean("people");
        System.out.println(people.toString());
    }
}
十月 28, 2018 2:04:56 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
資訊: Refreshing org[email protected]246b179d: startup date [Sun Oct 28 14:04:56 CST 2018]; root of context hierarchy
十月 28, 2018 2:04:56 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
資訊: Loading XML bean definitions from class path resource [applicationContext-beans.xml]

Car{brand='保時捷', origin='未知', price=1100000}
People{name='Tom', cat=Car{brand='保時捷', origin='未知', price=1100000}}

Process finished with exit code 0