Spring提供了两种基于XML的装配方式
- 设值注入
- 构造注入
使用设值注入需要使用<property>
标签指定属性值。
Spring在实例化Bean的过程中,Spring首先会调用Bean的默认构造方法来实例化Bean对象,然后通过反射调用setter方法注入属性值,使用设值注入必须满足两个条件:
- Bean类必须提供一个默认的无参构造方法
- Bean类必须为需要注入的属性提供对应的setter方法
使用构造注入,在配置文件中需要使用<constructor-arg>
标签指定value属性值即可。
构造器的几种注入方式:
- 根据索引index注入
- 根据参数的类型
- 根据参数名称注入
- 通过构造函数注入(原始方式)
User.java
package com.du.test;
/**
* Created with IDEA
*
* @author duzhentong
* @Date 2018/6/4
* @Time 8:18
*/
public class User {
private int id;
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
spring配置文件:spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--设值注入-->
<bean id="user1" class="com.du.test.User">
<property name="id" value="1001"/>
<property name="name" value="小明"/>
</bean>
<!--构造注入 -->
<!--1、根据索引 -->
<bean id="user2" class="com.du.test.User">
<constructor-arg index="0" value="1002"/>
<constructor-arg index="1" value="小红"/>
</bean>
<!--2、根据参数类型 -->
<bean id="user3" class="com.du.test.User">
<constructor-arg type="int" value="1003"/>
<!--<constructor-arg type="java.lang.Integer" value="1003"/>--><!--这样会报错-->
<constructor-arg type="java.lang.String" value="小光"/>
</bean>
<!--3、根据参数名称 -->
<bean id="user4" class="com.du.test.User">
<constructor-arg name="id" value="1004"/>
<constructor-arg name="name" value="小兰"/>
</bean>
<!--4、原始方式 -->
<bean id="user5" class="com.du.test.User">
<constructor-arg value="1005"/>
<constructor-arg value="小飞"/>
</bean>
</beans>
测试类:Application.java
package com.du.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created with IDEA
*
* @author duzhentong
* @Date 2018/6/4
* @Time 8:39
*/
public class Application {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
System.out.println(ac.getBean("user1"));
System.out.println(ac.getBean("user2"));
System.out.println(ac.getBean("user3"));
System.out.println(ac.getBean("user4"));
System.out.println(ac.getBean("user5"));
}
}
输出:
User{id=1001, name='小明'}
User{id=1002, name='小红'}
User{id=1003, name='小光'}
User{id=1004, name='小兰'}
User{id=1005, name='小飞'}