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