创建的方式
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;
public class Student {
private int id; private String name;
public Student() {
}
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;
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实体类
)
- 通过参数下标赋值
- 通过参数类型赋值
- 通过参数名称赋值
通过参数下标赋值
在上面的构造方法中,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方法进行属性的注入,可以注入部分
参数。