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

原文地址:https://www.cnblogs.com/houchen/p/13162003.html