创建的方式

Spring IOC可以通过无参构造方法有参构造方法来创建对象,默认是通过无参构造方法创建

无参构造方法

如果实体类不存在有参构造方法时可以省略,存在就需要自己写出来(不然就无法通过无参构造方法创建),也就是Set注入

Student实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package entity;

/**
* @author LeDao
* @company
* @create 2022-02-13 21:26
*/
public class Student {

private int id;
private String name;


/**
* 无参构造方法,如果不存在有参构造方法时可以省略,存在就需要自己写出来
*/
public Student() {

}

/**
* 有参构造方法
*
* @param id
* @param name
*/
public Student(int id, String name) {
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}

XML文件定义对象

每一个bean标签为一个对象,id为对象名,class为所属对象

property标签为对象的属性名称以及值,name为属性名称,value为值

1
2
3
4
5
6
7
8
9
10
11
<?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 id="tom" class="entity.Student">
<property name="id" value="1"/>
<property name="name" value="tom"/>
</bean>
</beans>

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* @author LeDao
* @company
* @create 2022-02-12 15:56
*/
public class MyTest {

public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Student student = (Student) context.getBean("tom");
System.out.println(student);
}
}

有参构造方法

也称为构造器注入,通过有参构造方法来创建对象的方式有三种:(具体的有参构造方法看上面的Student实体类

  1. 通过参数下标赋值
  2. 通过参数类型赋值
  3. 通过参数名称赋值

通过参数下标赋值

在上面的构造方法中,id的下标为0,name的下标为1

1
2
3
4
5
<!--通过有参构造方法创建对象(通过参数下标赋值)-->
<bean id="tom1" class="entity.Student">
<constructor-arg index="0" value="2"/>
<constructor-arg index="1" value="tom1"/>
</bean>

通过参数类型赋值

不要使用这种方式,因为可能会存在参数类型相同的情况

1
2
3
4
5
<!--通过有参构造方法创建对象(通过参数类型赋值)-->
<bean id="tom2" class="entity.Student">
<constructor-arg type="int" value="3"/>
<constructor-arg type="java.lang.String" value="tom2"/>
</bean>

通过参数名称赋值

使用这种方式最好

1
2
3
4
5
<!--通过有参构造方法创建对象(通过参数名称赋值)-->
<bean id="tom3" class="entity.Student">
<constructor-arg name="id" value="4"/>
<constructor-arg name="name" value="tom3"/>
</bean>

PS.

Set注入和构造器注入的区别:构造器注入就是在有参构造的情况下,采用有参构造进行注入属性值,要注入全部参数;set注入就是只有无参构造的情况之下,采用set方法进行属性的注入,可以注入部分参数。