Spring Bean容器
Spring核心容器
Spring的核心是容器,而容器並不唯一,框架本身就提供了很多個容器的實現,大概分為兩種型別:一種是不常用的BeanFactory,這是最簡單的容器,只能提供基本的DI功能;還有一種就是繼承了BeanFactory後派生而來的應用上下文,其抽象介面也就是我們上面提到的的ApplicationContext,它能提供更多企業級的服務,例如解析配置文字資訊等等,這也是應用上下文例項物件最常見的應用場景。有了上下文物件,我們就能向容器註冊需要Spring管理的物件了。
Spring Bean生命週期
例項化一個Bean--也就是我們常說的new;
按照Spring上下文對例項化的Bean進行配置--也就是IOC注入;
如果這個Bean已經實現了BeanNameAware介面,會呼叫它實現的setBeanName(String)方法,此處傳遞的就是Spring配置檔案中Bean的id值
如果這個Bean已經實現了BeanFactoryAware介面,會呼叫它實現的setBeanFactory(setBeanFactory(BeanFactory)傳遞的是Spring工廠自身(可以用這個方式來獲取其它Bean,只需在Spring配置檔案中配置一個普通的Bean就可以);
如果這個Bean已經實現了ApplicationContextAware介面,會呼叫setApplicationContext(ApplicationContext)方法,傳入Spring上下文(同樣這個方式也可以實現步驟4的內容,但比4更好,因為ApplicationContext是BeanFactory的子介面,有更多的實現方法);
如果這個Bean關聯了BeanPostProcessor介面,將會呼叫postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor經常被用作是Bean內容的更改,並且由於這個是在Bean初始化結束時呼叫那個的方法,也可以被應用於記憶體或快取技術;
如果Bean在Spring配置檔案中配置了init-method屬性會自動呼叫其配置的初始化方法。
如果這個Bean關聯了BeanPostProcessor介面,將會呼叫postProcessAfterInitialization(Object obj, String s)方法、;
注:以上工作完成以後就可以應用這個Bean了,那這個Bean是一個Singleton的,所以一般情況下我們呼叫同一個id的Bean會是在內容地址相同的例項,當然在Spring配置檔案中也可以配置非Singleton,這裡我們不做贅述。
當Bean不再需要時,會經過清理階段,如果Bean實現了DisposableBean這個介面,會呼叫那個其實現的destroy()方法;
最後,如果這個Bean的Spring配置中配置了destroy-method屬性,會自動呼叫其配置的銷燬方法。
相關文章
- Spring IOC 一——Spring容器裝配BeanSpringBean
- 如何讓 Bean 深度感知 Spring 容器BeanSpring
- Spring容器 —— 深入 bean 的載入(五、初始化 bean)SpringBean
- 你說,怎麼把Bean塞到Spring容器?BeanSpring
- 探索Spring系列(一)Spring容器和Bean的生命週期SpringBean
- 如何向Spring IOC 容器 動態註冊beanSpringBean
- Spring(十二):IOC容器中Bean的生命週期方法SpringBean
- [Spring]BeanSpringBean
- Spring容器啟動流程+Bean的生命週期【附原始碼】SpringBean原始碼
- 4、Spring IOC容器 Bean物件例項化的3種方式SpringBean物件
- spring-IOC容器原始碼分析(一)bean初始化流程Spring原始碼Bean
- 【Spring】Bean管理SpringBean
- 【Java面試】Spring中有哪些方式可以把Bean注入到IOC容器?Java面試SpringBean
- Spring Ioc原始碼分析系列--容器例項化Bean的四種方法Spring原始碼Bean
- Spring Bean 詳解SpringBean
- spring boot factory beanSpring BootBean
- 淺談Spring BeanSpringBean
- Spring基礎(Bean)SpringBean
- Spring bean 裝配SpringBean
- Spring Bean 綜述SpringBean
- Spring Bean作用域SpringBean
- Spring裝配Bean(六)Bean的作用域SpringBean
- Spring Bean 標籤解析SpringBean
- Spring Bean生命週期SpringBean
- 二、Spring裝配BeanSpringBean
- Spring系列.Bean簡介SpringBean
- 《Spring》(六)---- Bean的scopeSpringBean
- Spring裝配Bean(四)SpringBean
- Spring裝配Bean(一)SpringBean
- Spring裝配Bean(二)SpringBean
- Spring Bean 生命週期SpringBean
- 獲取Spring容器中Bean例項的工具類(Java泛型方法實現)SpringBeanJava泛型
- Spring 學習筆記(2) Spring BeanSpring筆記Bean
- spring容器Spring
- Spring 原始碼(17)Spring Bean的建立過程(8)Bean的初始化Spring原始碼Bean
- 就想搞明白,component-scan 是怎麼把Bean都註冊到Spring容器的!BeanSpring
- 【Spring註解開發】元件註冊-使用@Configuration和@Bean給容器中註冊元件Spring元件Bean
- 「Spring認證」Spring Bean 定義教學SpringBean