这里写自定义目录标题
- 一、区别
- 二、demo演示
- 1、Order
- 2、DependsOn
一、区别
- @Order:改变Bean注入的顺序
- @DependsOn:改变Bean创建的顺序
二、demo演示
1、Order
类 A B 都实现了接口 I ,且 A B都由Spring容器创建并且管理
public class A implements I{
public A() {
System.out.println("A init ...");
}
}
public class B implements I {
public B() {
System.out.println("B init ...");
}
}
@Configuration
public class MyConfig {
@Bean
public A a() {
return new A();
}
@Bean
public B b() {
return new B();
}
}
在 controller中对 List list进行依赖注入
@RestController
public class HelloWorldController {
@Autowired
List<I> iList;
@GetMapping("/testOrderAndDependence")
public String testOrderAndDependence() {
for (I i : iList) {
System.out.println(i);
}
return "ok";
}
}
没有加 @order的时候,可以看到 bean的注入顺序就等于 bean的创建顺序
添加 @Order注解
@Configuration
public class MyConfig {
@Bean
@Order(1)
public A a() {
return new A();
}
@Bean
@Order(0)
public B b() {
return new B();
}
}
可以看到Bean的创建顺序没有改变,但是iList中Bean的注入顺序改变了
2、DependsOn
在Spring中创建A对象的时候加上DependsOn(“b”) 注解,可以看到Bean创建的顺序发生了改变
@Configuration
public class MyConfig {
@Bean
@DependsOn("b")
public A a() {
return new A();
}
@Bean
public B b() {
return new B();
}
}