0%

spring | 构造注入

注入: 通过 spring 的配置文件,为成员变量赋值。

Set 注入: Spring 调用 set 方法,通过配置文件为成员变量赋值。

构造注入: Spring 调用构造方法,通过配置文件,为成员变量赋值。

构造方法

创建一个 person 类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.rhino;

import lombok.Getter;

public class Person {

private Integer id;
@Getter
private String name;

public Person(Integer id, String name) {
this.id = id;
this.name = name;
}


}

然后 applicationContext.xml 这样写

1
2
3
4
5
6
7
8
9
<?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="person" class="com.rhino.Person">
<constructor-arg index="0" value="1"/> <!--数目和构造方法数目一样-->
<constructor-arg index="1" value="小明"/>
</bean>
</beans>

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import com.rhino.Person;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestFunction {

@Test
public void test() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
Person person = (Person) ctx.getBean("person");
System.out.println(person.getName());
}
}

构造方法重载

  • 参数个数不同
    • 通过 constructor-arg 数目进行区分

相同数目的参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.rhino;

import lombok.Getter;

public class Person {

private Integer id;
@Getter
private String name;

public Person(Integer id) {
this.id = id;
}

public Person(String name) {
this.name = name;
}


}

xml 文件进行这样写

1
2
3
4
5
6
7
8
<?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="person" class="com.rhino.Person">
<constructor-arg index="0" value="小明" type="java.lang.String"/>
</bean>
</beans>

使用 type 进行区分。

请我喝杯咖啡吧~