作用
@DependsOn用来指定当前bean依赖的bean,spring在创建bean的时候,如果bean之间没有依赖关系,那么spring容器很难保证bean实例创建的顺 序,如果想确保容器在创建某些bean之前,需要先创建好一些其他的bean,可以通过@DependsOn来 实现,@DependsOn可以指定当前bean依赖的bean,通过这个可以确保@DependsOn指定的bean 在当前bean创建之前先创建好。
使用范围:任意类型、方法。
参数:value:string类型的数组,用来指定当前bean需要依赖的bean名称,可以确保当前容器在创建被@DependsOn标注的bean之前,先将value指定的多个bean先创建好。
定义
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DependsOn {
String[] value() default {};
}
使用
1、和@Compontent一起使用于类上
下面定义3个bean: service1, service2, service3;service3需要依赖其他两个bean,需要确保容器在创建service3之前需要先将其它两个bean创建好。
@Component
public class Service1 {
public Service1(){
System.out.println("create service1");
}
}
@Component
public class Service2 {
private Service2(){
System.out.println("create service2");
}
}
@DependsOn({"service1", "service2"})
@Component
public class Service3 {
public Service3(){
System.out.println("create service3");
}
public void test(){
System.out.println("this is test");
}
}
测试:
@SpringBootTest
public class injectTest {
@Autowired
private Service3 service3;
@Test
public void test(){
service3.test();
}
}
结果输出:
create service1
create service2
create service3
从输出结果可以看,spring容器在创建service3之前,先将service1和service2给创建好了
原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/161