you need:
一个实体类
一个存放bean的容器(配置文件)
package com.kxy.pojo;
public class User {
int age;
String name;
public User() {
System.out.println("User()...");
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
public void setAge(int age) {
this.age=age;
}
public void setName(String name) {
this.name=name;
}
}
<?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="User" class="com.kxy.pojo.User">
<property name="age" value="12"/>
<property name="name" value="kxy"/>
</bean>
</beans>
IOC默认使用无参构造创建对象
当我们需要用到有参构造创建对象时:
有三种方式的依赖注入:
1.下标注入
<bean id="User" class="com.kxy.pojo.User">
<constructor-arg index="0" value="13"/>
<constructor-arg index="1" value="kxy"/>
</bean>
2.通过类型注入(类型重复冲突,不推荐)
<bean id="User" class="com.kxy.pojo.User">
<constructor-arg type="int" value="14"/>
<constructor-arg type="java.lang.String" value="kxy"/>
</bean>
3.通过参数名指定注入(最直接,推荐)
<bean id="User" class="com.kxy.pojo.User">
<constructor-arg name="age" value="15"/>
<constructor-arg name="name" value="kxy"/>
</bean>
当然如果是一个复杂类型,可以用ref来引入。
注意,在bean容器被加载一次后,所有的bean都会实例化。
也就是说从context里get之前,所有的bean就已经被init(初始化)好了,因此无论你get的是哪个bean,其他的bean依然是处于实例状态的。
这一点将伴随我们spring的终身学习!