基础配置
- 在spring配置文件中配置Bean
- 使用<bean>标签配置
<!--配置java程序类-->
<bean id="helloworld" class="mao.shu.spring.HelloWorld">
<!--类中的属性-->
<property name="userName" value="xiemaoshu"/>
</bean>
- 标签属性说明
- id:IOC容器中的唯一标识符,可以自定义,但不允许重复,通过BeanFactory类中的getBean()方法,可以利用id值来获取java类对象
- class:java类的全名,IOC容器通过反射来实例化java程序类
- <property>标签:描述类中的成员变量,通过"name"属性指定类成员变量,通过value属性为类成员变量复制
Spring容器
ApplicationContext
容器操作类继承关系
依赖注入的方式(为java类中成员变量赋值的方式)
属性注入
<!--配置java程序类-->
<bean id="helloworld" class="mao.shu.spring.HelloWorld">
<!--类中的属性-->
<property name="userName" value="xiemaoshu"/>
</bean>
通过构造方法注入
-
发现问题
-
java程序类中可以定义构造方法,java类中的成员变量也可以通过构造方法赋值,并且java类支持定义多个构造方法.
-
那么在通过Spring的构造方法注入的时候是否要注意,如何配置不同的构造方法?
-
java程序类
package mao.shu.spring;
public class Person {
//类成员
private Integer id;
private String name;
private Integer age;
private double balance;
//构造方法
// 两个带有三个参数的构造方法
public Person(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Person(Integer id, String name, double balance) {
this.id = id;
this.name = name;
this.balance = balance;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", balance=" + balance +
'}';
}
}
- 配置构造器注入,修改spring-config.xml文件
- 此时配置两个构造器注入,第一个构造器赋值的是"name",“age”,和"id"属性
- 另一个构造器赋值的是"id","name"和"balance"属性
- 现在希望能够通过两个构造器得到两个实例化对象
- 旧版本的spring中<constructor-arg>标签之中不允许有name属性,在新版本中可以存在有name属性了
<bean id="person1" class="mao.shu.spring.Person">
<constructor-arg name="id" value="9527"/>
<constructor-arg name="name" value="xiemaoshu"/>
<constructor-arg name="age" value="22"/>
</bean>
<bean id="person2" class="mao.shu.spring.Person">
<constructor-arg name="id" value="789"/>
<constructor-arg name="name" value="测试构造器注入"/>
<constructor-arg name="balance" value="5000.54"/>
</bean>
- 测试方法
public class Begin {
public static void main(String[]args){
ApplicationContext app =
new ClassPathXmlApplicationContext("spring-config.xml");
Person person1 = (Person) app.getBean("person1");
Person person2 = (Person) app.getBean("person2");
System.out.println("persion1 = " + person1);
System.out.println("persion2 = " + person2);
}
}
- 正确赋值
- 除了通过"name"来匹配参数,还可以通过索引来匹配参数
<bean id="person1" class="mao.shu.spring.Person">
<constructor-arg name="id" value="9527" index="0"/>
<constructor-arg name="name" value="xiemaoshu" index="1"/>
<constructor-arg name="age" value="22" index="2"/>
</bean>
- 还可以通过类型匹配参数
<bean id="person2" class="mao.shu.spring.Person">
<constructor-arg name="id" value="789" type="java.lang.Integer"/>
<constructor-arg name="name" value="测试构造器注入" type="java.lang.String"/>
<constructor-arg name="balance" value="5000.54" type="double"/>
</bean>