spring中 屬性注入的四種方式


 

1、set方法注入

配置:

   <!-- set 方式屬性注入 -->
    <bean name="user" class="cn.itcast.bean.User">
        <!--為User對象中  名為name的屬性注入  tom 作為值 -->
            <!-- 值類型注入  -->
        <property name="name" value="tom"></property>
        <property name="age" value="18"></property>
              <!-- 引用類型注入  -->
        <property name="car" ref="car"></property>
    </bean>

    <!-- 將Car對象配置到容器中 -->
    <bean name="car" class="cn.itcast.bean.Car">
        <property name="name" value="蘭博基尼"></property>
        <property name="color" value="黃色"></property>
    </bean>
//測試demo
public class Demo {
    
    @Test
    public void test(){
        //1、創建容器對象
        ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml");
        //2、像容器要User對象
        User user = (User)ac.getBean("user");
        //3、打印user對象
        System.out.println(user.toString());
    }
    
}

結果:

1592486545(1)

 

2、構造方法注入

配置:

<!-- 構造函數注入 -->
    <bean name="user1" class="cn.itcast.bean.User">
        <constructor-arg name="name" value="jerry"></constructor-arg>
        <constructor-arg name="car" ref="car"></constructor-arg>
    </bean>

實體:

package cn.itcast.bean;

public class User {
    private String name;
    private Integer age;
    
    private Car car;
    
    
    public User(String name, Car car) {
        System.out.println("User(String name, Car car)");
        this.name = name;
        this.car = car;
    }
    
    public User(Integer name, Car car) {
        System.out.println("User(Integer name, Car car)");
        this.name = name+"";
        this.car = car;
    }

    public User(){
        System.out.println("user對象空參構造");
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", car=" + car.toString() + "]";
    }
    
}

demo

public class Demo {
    
    @Test
    public void test(){
        //1、創建容器對象
        ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml");
        //2、像容器要User對象
        User user = (User)ac.getBean("user1");
        //3、打印user對象
        System.out.println(user.toString());
    }
    
}

結果

1592487576(1)

由 name+index + type 可以任意指定一個構造參數

<!-- 構造函數注入 -->
    <bean name="user1" class="cn.itcast.bean.User">
        <!--name屬性: 構造參數的參數名  -->
        <!--name屬性: 構造參數的索引  -->
        <!--name屬性: 構造參數的類型  -->
        <constructor-arg name="name" index="0" type="java.lang.Integer" value="jerry"></constructor-arg>
        <constructor-arg name="car" ref="car"></constructor-arg>
    </bean>

 

3、p名稱空間注入

配置

<!-- p名稱空間注入 -->
    <!-- 
        1、導入p名稱空間     xmlns="http://www.springframework.org/schema/beans" 
        2、使用 p:屬性 完成屬性注入   
            值類型     p:屬性名=值
            對象類型:  p:屬性名-ref ="對象名稱"
        
      -->
    <bean name="user3" class="cn.itcast.bean.User" p:name="jack" p:age="20" p:car-ref="car">
    </bean>

demo

public class Demo {
    
    @Test
    public void test(){
        //1、創建容器對象
        ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml");
        //2、像容器要User對象
        User user = (User)ac.getBean("user3");
        //3、打印user對象
        System.out.println(user.toString());
    }
    
}

結果:

1592489039(1)

 

4、spel注入

配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.springframework.org/schema/beans" 
xmlns:p="http://www.springframework.org/schema/p" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
    
     <!-- set 方式屬性注入 -->
    <bean name="user" class="cn.itcast.bean.User">
        <!--為User對象中  名為name的屬性注入  tom 作為值 -->
        <property name="name" value="tom"></property>
        <property name="age" value="18"></property>
        <property name="car" ref="car"></property>
    </bean>

    <!-- 將Car對象配置到容器中 -->
    <bean name="car" class="cn.itcast.bean.Car">
        <property name="name" value="蘭博基尼"></property>
        <property name="color" value="黃色"></property>
    </bean>
    
    <!-- 構造函數注入 -->
    <bean name="user1" class="cn.itcast.bean.User">
        <!--name屬性: 構造參數的參數名  -->
        <!--name屬性: 構造參數的索引  -->
        <!--name屬性: 構造參數的類型  -->
        <constructor-arg name="name" index="0" type="java.lang.Integer" value="18"></constructor-arg>
        <constructor-arg name="car" ref="car"></constructor-arg>
    </bean>
    
    <!-- p名稱空間注入 -->
    <!-- 
        1、導入p名稱空間     xmlns="http://www.springframework.org/schema/beans" 
        2、使用 p:屬性 完成屬性注入   
            值類型     p:屬性名=值
            對象類型:  p:屬性名-ref ="對象名稱"
        
      -->
    <bean name="user3" class="cn.itcast.bean.User" p:name="jack" p:age="20" p:car-ref="car">
    </bean>
    
    
    <!-- spel 注入  -->
    <bean name="user4" class="cn.itcast.bean.User">
        <property name="name" value="#{user.name}"></property>
        <property name="age" value="#{12}"></property>
        <property name="car" ref="car"></property>
    </bean>
</beans>

demo

public class Demo {
    
    @Test
    public void test(){
        //1、創建容器對象
        ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml");
        //2、像容器要User對象
        User user = (User)ac.getBean("user4");
        //3、打印user對象
        System.out.println(user.toString());
    }
    
}

 

結果

1592536554


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM