Spring IOC 中涉及的重要介面
-
BeanDefinition
Bean的描述資訊,實作類包括RootBeanDefinition和GenericBeanDefinition,Bean的描述資訊中定義了一系列Bean的資訊,比如:beanClassName、scope、lazyinit、dependsOn、primary、initMethodName、destroyMethodName、isSington、isAbstract等資訊, -
BeanDefinitionReader用于決議
Bean的資源閱讀器,比如針對于XML檔案的配置的Bean,實作類XmlBeanDefinitionReader,針對properties檔案的配置的Bean,實作類為PropertiesBeanDefinitionReader,Spring在啟動時會將xml檔案通過loadBeanDefinitions方法進行決議, -
BeanFactory
是IOC容器實作的頂層介面,默認的實作為DefaultListableBeanFactory,Spring Bean的整個生命周期都是由DefaultListableBeanFactory去管理的,這個類非常的重要, -
BeanFactoryPostProcessor這個介面是
BeanFactory的增強處理器,用于在Bean加載為BeanDefinition之后的擴展,比如實作類PlaceHolderConfigurerSupport就是用來處理占位符決議的,當我在xml檔案中配置jdbc資訊的時候,通過是用${xxx.jdbUrl}這種方式配置資料庫連接的時候,就是通過這個類來處理和決議的, -
Aware這個介面,他下面有一堆的子介面,比如
BeanNameAware、ApplicationContextAware、BeanFactoryAware、EnvironmentAware等,可以通過實作這些介面完成ioc容器中特定資訊的設定,比如EnvironmentAware,可以在Bean創建程序中設定環境資訊到對應的Bean物件中,后期通過bean物件獲取環境資訊資料, -
BeanPostProcessor這個介面是
Bean的增強處理器,用于在Bean進行初始化時呼叫init-method方法的前后進行增強,他有兩個方法:postProcessBeforeInitialization和postProcessAfterInitialization,分別用于bean初始化方法init-method之前和之后呼叫,當然還可以進行很多擴展,比如aop就是通過postProcessAfterInitialization方法中去創建動態代理物件,
Spring Bean 的生命周期

- 首先通過BeanDefinitionReader將xml中的Bean配置加載到BeanDefinition中
- 然后將BeanDefinition放入DefaultListableBeanFacotry的beanDefinitionMap和beanDefinitionNames集合中
- 然后呼叫BeanFactoryPostProcessor#postProcessorBeanFactory對容器中的BeanDefinition的屬性進行增強決議
- 然后通過反射呼叫物件的建構式進行物件的實體化
- 然后呼叫populateBean進行屬性填充
- 然后呼叫初始化方法initializeBean,初始化時又會先呼叫invokeAwareMethods方法執行一堆的Aware方法
- 然后BeanPostProcessor#postProcessBeforeInitialization方法執行bean增強器的前置處理
- 然后呼叫InitializingBean#afterPropertiesSet方法或者是呼叫自定義的init-method方法
- 然后呼叫BeanPostProcessor#postProcessAfterInitialization方法執行bean增強的后置處理
- 最后完成Bean的創建,最終放入一級快取singletonObjects中
整體流程大概就是這個,有了整體流程就可以進行下一步Bean創建的細節解讀,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458199.html
標籤:Java
