Bootstrap

Spring的误区使用注意事项

1、@Order对自定义的普通bean无控制顺序的作用
已知有用的场景:

  • @AspectJ定义的切面类的加载顺序
  • ApplicationListener的实现类的加载顺序
  • 控制CommandLineRunner的实现类的加载顺序

2、@AutoConfigureOrder在当前工程去指定@Configuration顺序也没有,这个一般是当前项目读取三方依赖,比如spring.factories中定义的@Configuration的加载顺序

3、配置的优先级

  • @Configuration的配置类在最先被初始化,多个@Configuration配置类,顺序由构造AnnotationConfigApplicationContext时传入的顺序为准(若是被scan扫描进去的,则无序),然后是@Bean、@Component之类的初始化。(常见的配置优先级是这样的,也有个别spring的内部实现类的优先级在@configuration之前的,比如HealthIndicator)
  • @Configuration配置类下:@Bean方法上加static成为静态方法,并不能提升此Bean的优先级;但是内部静态类里的@Bean的优先级均高于外层定义的@Bean,static静态内部类能够提升优先级,它比非静态内部类的优先级还高
  • @Configuration配置类下的bean的加载顺序与书写顺序也无关

待继续补充~~

;