標籤:beanfactory applicationcontext bean spring 好記性不如爛筆頭
如果使用ApplicationContext來產生、管理Bean, 一個Bean從建立到銷毀,會曆經幾個執行階段。
我個人理解一般的bean的生命週期主要包括:建立,初始化,使用階段,銷毀四個核心階段。使用ApplicationContext 和BeanFactory對bean的生命週期來看,宏觀上基本相同,微觀上有一些差異。
如果使用ApplicationContext來產生並管理Bean,在執行BeanfactoryAware的
setBeanFactory()階段之後,若Bean類上有實現org.springframework.context.ApplicationContextAware介面,則執行setApplicationContext()方法,接著才繼續進行BeanPostProcessors的processBeforeInitialization()及之後的流程。
在非WEB應用程式中,若想在關閉容器之前調用Bean定義檔案中Singleton的Bean所設定的destroy方法,則可以執行AbstractApplicationContext的registerShutdownHook()方法,並向JVM註冊相關方法,例如:
AbstractApplicationContext context = new ClassPathXmlApplicationContext
(“beans-config.xml”);
context.registerShutdownHook();
//執行應用程式
在應用程式結束之前,Bean定義檔案上所設定的destroy方法將會被調用執行。
如果使用BeanFactory,只有在使用getBean()方法真正取得Bean時,才會做執行個體化的動作;
如果使用ApplicationContext,則會預先針對Bean定義檔案的內容,將所有的Bean執行個體化。如果這不是你想要的,可以在上設定”lazy-init”屬性為”true,ApplicationContext 就不會在啟動的時候針對該Bean作執行個體化的動作,例如:
<bean id="some" class="org.bearfly.bean.Some lazy-init="true"></bean>
好記性不如爛筆頭86-spring3學習(7)-ApplicationContext中bean的生命週期