号外号外:麻烦点击左侧
我正在参加博客之星评选,请您投票
,给个五星好评,谢谢大家了!!!
1:写在前面
在工作中经常有这样的需求,希望某个spring bean初始化之前其他的某个spring bean已经完成初始化,我们可以称之为依赖
,目前据我所知有两种方式完成这种需求,第一种就是,将被依赖的bean作为依赖bean的构造函数的参数,第二种方式就是通过spring提供的depend-on
,下面我们分别来看下这两种方式。
2:构造函数
2.1:定义被依赖的类
public class ByConstructorClsA {
public ByConstructorClsA() {
System.out.println("ByConstructorClsA.ByConstructorClsA 被依赖类初始化了。。。");
}
}
2.2:定义依赖类
注意在构造函数中使用2.1:定义被依赖的类
中定义的类作为构造函数参数。
public class ByConstructorClsB {
private ByConstructorClsA byConstructorClsA;
public ByConstructorClsB(ByConstructorClsA byConstructorClsA) {
this.byConstructorClsA = byConstructorClsA;
System.out.println("ByConstructorClsB.ByConstructorClsB 依赖类初始化了。。。");
}
}
2.3:测试类
@Test
public void testBeanInitOrderByConstructorParam() {
ClassPathXmlApplicationContext ac
= new ClassPathXmlApplicationContext("testbyconstructorparam.xml");
ac.getBean("byConstructorClsB");
}
运行:
ByConstructorClsA.ByConstructorClsA 被依赖类初始化了。。。
ByConstructorClsB.ByConstructorClsB 依赖类初始化了。。。
Process finished with exit code 0
3:depend-on
3.1:定义被依赖的类
public class DependOnClassA {
public DependOnClassA() {
System.out.println("DependOnClassA.DependOnClassA 通过depend-on 依赖的类初始化了。。。");
}
}
3.2:定义依赖的类
public class DependOnClassB {
public DependOnClassB() {
System.out.println("DependOnClassB.DependOnClassB 配置了depend-on的类初始化了。。。");
}
}
3.3: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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dependOnClassA" class="yudaosourcecode.dependon.DependOnClassA"/>
<bean id="dependOnClassB" class="yudaosourcecode.dependon.DependOnClassB" depends-on="dependOnClassA"/>
</beans>
3.4:测试类
@Test
public void testBeanInitOrderByDependOn() {
ClassPathXmlApplicationContext ac
= new ClassPathXmlApplicationContext("testbydependon.xml");
ac.getBean("dependOnClassB");
}
运行:
DependOnClassA.DependOnClassA 通过depend-on 依赖的类初始化了。。。
DependOnClassB.DependOnClassB 配置了depend-on的类初始化了。。。
Process finished with exit code 0