使用场景
当bean 与bean直接 初始化 有先后顺序时,就需要指定他们直接的依赖关系,可以使用depends-on属性。
实例代码
User
public class User{
public User() {
System.out.println("User initialized");
Shared.setValue("Set value in User Constructor!");
}
}
Shared
public class Shared {
private static String value;
public static String getValue() {
return value;
}
public static void setValue(String value) {
Shared.value = value;
}
}
Goods
public class Goods {
public Goods() {
System.out.println("Goods initialized");
}
public String toString() {
return "Shared.getValue() = " + Shared.getValue();
}
}
从上可以看出,Goods 初始化之前 需要确保 user 初始化。
spring.xml
<bean id="user" class="org.ifly.edu.spring.bean.dependOn.User" />
<bean id="goods" class="org.ifly.edu.spring.bean.dependOn.Goods" />
运行代码
public static void main(String[] args) {
XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring.xml"));
Goods goods = (Goods)beanFactory.getBean("goods");
System.out.println(goods);
}
运行结果:
Goods initialized
Shared.getValue() = null
发现 User 并没有初始化。
解决办法:
<bean id="goods" class="org.ifly.edu.spring.bean.dependOn.Goods" depends-on="user"/>
再次运行
User initialized
Goods initialized
Shared.getValue() = Set value in User Constructor!
这样User 就初始化了