Spring三种注入方法(set注入、构造方法注入、p标签注入)

2022-07-04 10:37:24

一、构造注入


编写一个User类

public class User {
    private String name;    //名字
    private Integer age;    //性别
    private Date date;      //日期    依赖的对象
 
    //通过构造为成员属性进行初始化
    public User(String name, Integer age, Date date) {
        this.name = name;
        this.age = age;
        this.date = date;
    }
    
    //toString
}


编写bean.xml配置文件,这里需要值得注意的是,当对象中有依赖某一个对象时,配置文件中需要提供依赖对象的bean,通过ref属性来进行引入,达到注入效果。构造注入必须要提供相应的带参构造方法。

<?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对象 -->
    <bean id="date" class="java.util.Date"></bean>
 
    <!-- 构造注入 -->
    <bean id="user" class="com.jack.User">
        <constructor-arg name="name" value="张三" />
        <constructor-arg name="age"  value="18" />
        <constructor-arg name="date" ref="date" />
    </bean>
</beans>


测试类

public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:bean.xml");
        User user = (User) ac.getBean("user");
        System.out.println(user);
    }
}


运行结果

 二、Set注入


set注入需要对象中提供set方法,因为bean对象初始化时,是通过对象中的setXxx方法来进行初始化的。

我们可以做一个小测试,在setName方法中加一个输出语句

public class User {
    private String name;    //名字
    private Integer age;    //性别
    private Date date;      //日期    依赖的对象
 
    public void setName(String name) {
        System.out.println("真的是调用set方法来进行初始化呢!");
        this.name = name;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
 
    public void setDate(Date date) {
        this.date = date;
    }
 
    //toString
}


bean.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对象 -->
    <bean id="date" class="java.util.Date"></bean>
 
    <!-- set注入 -->
    <bean id="userSet" class="com.jack.User">
        <property name="name" value="李四" />
        <property name="age"  value="19" />
        <property name="date" ref="date" />
    </bean>
</beans>


测试

   public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:bean.xml");
        User user = (User) ac.getBean("userSet");
        System.out.println(user);
    }


运行结果

从结果上看,真的是调用set方法来进行对象的初始化

三、p标签注入


User类和Set注入的User类一样,这里为什么说一样呢?

解释一下:其实p标签注入个人觉得就是set注入,如果把set方法给删掉的话,配置文件就会报错,所以说,p标签注入必须要提供set方法,其实p标签注入就是对set注入的一种封装简化形式
p标签在配置文件中需要引入:xmlns:p="http://www.springframework.org/schema/p"

bean.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"
       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">
 
    <!-- 所依赖的bean对象 -->
    <bean id="date" class="java.util.Date"></bean>
 
    <!-- p标签注入 -->
    <bean id="userP" class="com.jack.User"
          p:name="王五" p:age="20" p:date-ref="date"></bean>
</beans>


测试

public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:bean.xml");
        User user = (User) ac.getBean("userP");
        System.out.println(user);
    }


运行结果



原文链接:https://blog.csdn.net/qq_42137703/article/details/108612826

  • 作者:程序员柒七
  • 原文链接:https://blog.csdn.net/weixin_46565024/article/details/122788329
    更新时间:2022-07-04 10:37:24