Bean的生产顺序是由什么决定的?
BeanDefinition的注册顺序是有什么决定的?
Bean在生产之前有个临时状态:BeanDefinition;存储着bean的描述信息。由BeanDefinition决定着Bean的生产顺序。会按照BeanDefinition的注册顺序来决定Bean的生产顺序。因为所有的BeanDefinition存储在List集合里面,list是有序的。
【Bean的创建顺序是由Bean Definition的注册顺序来决定的,当然依赖关系也会影响Bean的创建顺序】。比如B依赖A,那么,A先生产之后再生产B。
【问:BeanDefinition的注册顺序是由谁来决定的呢?】
BeanDefinition的注册顺序主要是由注解或者配置的解析顺序来决定的。
注册BeanDefinition就是在invokeBeanFactoryPostProcessor这个方法里面执行的,这个方法调用链非常深。
注解的解析顺序:(从上到下)
@Configuration
@Component
@Import直接导入类
@Bean
@Import导入一个实现接口:ImportBeanDefinitionRegistrar
BeanDefinitionRegistryPostProcessor是最后解析的(毕竟叫:后置处理器)
测试这几个顺序:@Configuration @Component @Import直接导入类 @Bean