Spring中的构造注入
在上一篇文章中我们了解了DI的set注入,接下来我们来看一下DI实现的另一种方式,构造注入。
构造注入
构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。
即,使用构造器设置依赖关系。
简单的理解就是spring调用类的有参构造方法,在创建对象的同时使用构造方法给属性赋值。
看一下构造注入的实现
首先定义School类和Student类,在Student类中创建School类的对象。
School类:
public class School {
private String name;
private String address;
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
Student类:
public class Student {
private String name;
private int age;
private School school;
public Student() {
System.out.println("Student的无参构造方法");
}
public Student(String myName, int myAge, School mySchool){
System.out.println("Student的有参构造方法");
this.name = myName;
this.age = myAge;
this.school = mySchool;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSchool(School school) {
this.school = school;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", school=" + school +
'}';
}
}
接下来在spring的配置文件中声明需要用到的对象
<!--
构造注入使用<constructor-arg>标签
一个<constructor-arg>标签表示构造方法的一个参数
<constructor-arg>标签属性:
name:表示构造方法的形参名
index:表示构造方法中参数的位置,自左向右从0开始
value:构造方法的形参类型是简单类型,使用value
ref:构造方法的形参类型是引用类型,使用ref
下面分别使用name和index来完成构造注入
-->
<!--使用name属性-->
<bean id="myStudent1" class="com.xxx.package01.Student">
<constructor-arg name="myName" value="张三" />
<constructor-arg name="myAge" value="20" />
<constructor-arg name="mySchool" ref="mySchool" />
</bean>
<!--使用index属性-->
<bean id="myStudent2" class="com.xxx.package01.Student">
<constructor-arg index="0" value="张三" />
<constructor-arg index="1" value="20" />
<constructor-arg index="2" ref="mySchool" />
</bean>
<bean id="mySchool" class="com.xxx.package01.School">
<property name="name" value="北京大学" />
<property name="address" value="北京" />
</bean>准备一个测试方法,测试以上程序
public class MyTest {
@Test
public void test01(){
String config = "package01/applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//使用myStudent1或myStudent2对象都能完成注入
Student myStudent = (Student) ac.getBean("myStudent1");
//Student myStudent = (Student) ac.getBean("myStudent2");
System.out.println("Student = " + myStudent);
}
}测试结果如下:

从输出结果我们可以看出,构造注入在创建对象时调用的是Student的有参构造方法,因为我们在spring配置文件中声明了两次Student对象,所以会调用两次有参构造方法。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot WebSocket 两种集成方式详解
WebSocket 是实现服务器主动推送、实时通信的利器,常见于聊天室、消息通知、实时监控大屏等场景,本文详细介绍了SpringBoot集成WebSocket的两种方式,感兴趣的朋友跟随小编一起看看吧2026-05-05
Java Swing中的表格(JTable)和树(JTree)组件使用实例
这篇文章主要介绍了Java Swing中的表格(JTable)和树(JTree)组件使用实例,本文同时讲解了表格和树的基本概念、常用方法、代码实例,需要的朋友可以参考下2014-10-10
浅析Spring boot 中 logback 配置<springPropert
这篇文章主要介绍了浅析Spring boot 中 logback 配置<springProperty> 读取application.properties 中的属性,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-02-02


最新评论