一、构造注入
编写一个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