出來混的

          總是要回的

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            0 隨筆 :: 1 文章 :: 0 評論 :: 0 Trackbacks
          Spring中Bean的生命周期
          在spring中,從BeanFactory或ApplicationContext取得的實例為Singleton,也就是預設為每一個Bean的別名只能維持一個實例,而不是每次都產生
          一個新的對象
          使用Singleton模式產生單一實例,對單線程的程序說并不會有什么問題,但對于多線程的程序,就必須注意安全(Thread-safe)的議題,防止多個線程
          同時存取共享資源所引發的數據不同步問題。
          然而在spring中 可以設定每次從BeanFactory或ApplicationContext指定別名并取得Bean時都產生一個新的實例:例如:
          <bean singleton="false">
          在spring中,singleton屬性默認是true,只有設定為false,則每次指定別名取得的Bean時都會產生一個新的實例
          一個Bean從創建到銷毀,如果是用BeanFactory來生成,管理Bean的話,會經歷幾個執行階段:
              1:Bean的建立:
                    有BeanFactory讀取Bean定義文件,并生成各個Bean實例
              2:屬性注入:
                    執行相關的Bean屬性依賴注入
              3:BeanNameAware的setBeanName():
                    如果Bean類有實現org.springframework.beans.BeanNameAware接口,則執行它的setBeanName()方法
              4:BeanFactoryAware的setBeanFactory():
                    如果Bean類有實現org.springframework.beans.factory.BeanFactoryAware接口,則執行它的setBeanFactory()方法
              5:BeanPostProcessors的ProcessBeforeInitialization()
                    如果任何的org.springframework.beans.factory.config.BeanPostProcessors實例與Bean實例相關。則執行BeanPostProcessors實例
                    的processBeforeInitialization()方法
              6:initializingBean的afterPropertiesSet():
                    如果Bean類已實現org.springframework.beans.factory.InitializingBean接口,則執行他的afterProPertiesSet()方法
              7:Bean定義文件中定義init-method:
                    可以在Bean定義文件中使用"init-method"屬性設定方法名稱例如:
                    <bean calss="onlyfun.caterpillar.HelloBean" init-method="initBean">
                    如果有以上設置的話,則執行到這個階段,就會執行initBean()方法
              8:BeanPostProcessors的ProcessaAfterInitialization()
                    如果有任何的BeanPostProcessors實例與Bean實例關聯,則執行BeanPostProcessors實例的ProcessaAfterInitialization()方法
              9:DisposableBean的destroy()
                    在容器關閉時,如果Bean類有實現org.springframework.beans.factory.DisposableBean接口,則執行他的destroy()方法
              10:Bean定義文件中定義destroy-method
                    在容器關閉時,可以在Bean定義文件中使用"destroy-method"屬性設定方法名稱,例如:
                    <bean destroy-method="destroyBean">
                    如果有以上設定的話,則進行至這個階段時,就會執行destroyBean()方法,如果是使用ApplicationContext來生成并管理Bean的話
                    則稍有不同,使用ApplicationContext來生成及管理Bean實例的話,在執行BeanFactoryAware的setBeanFactory()階段后,若Bean
                    類上有實現org.springframework.context.ApplicationContextAware接口,則執行其setApplicationContext()方法,接著才執行
                    BeanPostProcessors的ProcessBeforeInitialization()及之后的流程


          posted on 2010-12-23 10:09 zhenlishiwo 閱讀(128) 評論(0)  編輯  收藏 所屬分類: spring

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 平利县| 米易县| 朝阳区| 喀什市| 抚州市| 萝北县| 泽州县| 定边县| 南通市| 蒙阴县| 葵青区| 安福县| 增城市| 彭山县| 汉沽区| 怀安县| 建瓯市| 常德市| 新安县| 康定县| 榆中县| 甘谷县| 若尔盖县| 都匀市| 刚察县| 马关县| 泽普县| 卓尼县| 英德市| 武陟县| 海安县| 宝鸡市| 章丘市| 白河县| 醴陵市| 上高县| 望城县| 水城县| 麦盖提县| 汝阳县| 隆回县|