JAVA全系列 教程
3762个小节阅读:7094.6k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
IoC是由IoC容器帮助实例化Bean,并且在IoC容器内部注入关联属性(对象)的过程。
在上面演示的都是如何实例化Bean,下面演示的是如果给Bean注入属性。也就是说在讲解IoC/DI的另一半功能。
在前面讲解DI时,官方文档明确说明了DI有两种方式。官网说明如下:
翻译过来,就是下图效果:
构造注入要求必须在Bean中提供有参构造方法(无参数最好也提供上,这个位置不用。但是其他位置如果没有通过构造注入,默认是调用无参构造)。
检查com.bjsxt.pojo.People是否有有参构造方法,并且注意构造方法参数列表类型和参数顺序。
xxxxxxxxxx
public class People {
private int id;
private String name;
// 无参数构造
public People() {
}
// 有参构造
public People(int id, String name) {
this.id = id;
this.name = name;
}
// getter/setter 没有粘贴到文档中
}
在配置文件applicationContext.xml中可以通过<bean>
的子标签<constructor-arg>
设置构造方法中一个参数的值。
解释说明:
constructor-arg 里面有5个属性,这5个属性分为2类。
(1)用来确定给哪个属性进行赋值
name:参数名称
index:参数索引。从0开始算起。
type:参数类型。8大基本数据类型可以直接写关键字。其他类型需要写类型的全限定路径。
这三个属性如果只需要用到一个就能精确的告诉Spring,要设置的构造方法参数是哪个可以使用一个。如果无法精确到某个构造方法参数,可以多个一起结合使用。
(2)设置属性的值
value:简单数据类型直接设置。Spring会自动进行类型转换。
ref:需要引用另一个bean的id。也就是说这个参数是一个类类型,且这个类的对象也被Spring容器管理。
下面代码使用了type进行确认到底给构造方法哪个参数赋值。也可以尝试使用其他的属性来确认参数。
xxxxxxxxxx
<bean id="peo4" class="com.bjsxt.pojo.People">
<constructor-arg type="int" value="1"></constructor-arg>
<constructor-arg type="java.lang.String" value="张三"></constructor-arg>
</bean>
xxxxxxxxxx
/*
DI构造注入
*/
@Test
void constructorDI(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
People peo4 = context.getBean("peo4", People.class);
System.out.println(peo4);
}
控制台输出结果包含了配置的值