posts - 64,  comments - 9,  trackbacks - 0

          在Spring中,從BeanFactory或ApplicationContext取得的實例為Singleton,也就是預設為每個Bean的別名只維持一個實例。因此會存在資源共享的問題。如需要,則可以將其設置為”singleton=false”。

          在這里要注意的是此singleton的設置只是針對單一的配置文件而言,也就是說,如果存在多個BeanFactory或ApplicationContext,即使將singleton設置為false,也會存在資源共享的問題。

          下面來說下Bean的生命周期:

          l        Bean的建立

          有BeanFactory讀取Bean定義文件,并生成各個Bean實例

          l        屬性注入

          執(zhí)行相關的Bean屬性依賴注入

          l        BeanNameAware的setBeanName()

          如果Bean類有實現(xiàn)BeanNameAware接口,則執(zhí)行他的setBeanName()方法。

          l        BeanFactoryAware的setBeanFactory()

          如果Bean類有實現(xiàn)BeanFactoryAware接口,則執(zhí)行他的setBeanFactory()方法

          l        BeanPostProcessors的processBeforeInitialization()

          如果任何的BeanPostProcessors實例與Bean實例關聯(lián),則執(zhí)行BeanPostProcessors實例的processBeforeInitialization()方法

          l        initializingBean的afterPropertiesSet()

          l        如果Bean類已實現(xiàn)了org.springframework.beans.factory.InitializingBean接口,則執(zhí)行它的afterPropertiesSet()方法。

          l        Bean定義問教案中定義的init-method

          可以在Bean定義文件中使用”init-method”屬性設定方法名稱,進入這個階段,就會執(zhí)行initBean()方法。

          l        BeanPostProcessors的processAfterInitialization()

          如果任何的BeanPostProcessors實例與Bean實例關聯(lián),則執(zhí)行BeanPostProcessors實例的processAfterInitialization()方法

          l        DisposableBean的destroy()

          在容器關閉時,如果Bean類有實現(xiàn)org.springframework.beans.factory.

          DisposabelBean接口,則執(zhí)行它的destroy()方法

          l        Bean定義文件中定義的destroy-method

          可以在Bean定義文件中使用” destroy-method”屬性設定方法名稱,進入這個階段,就會執(zhí)行destroyBean()方法。

          以上是BeanFactory管理Bean的方法,如果采用ApplicationContext管理,則會稍有不同。使用ApplicationContext來生成和管理Bean實例的話,在執(zhí)行BeanFactoryAware的SetBeanFactory()階段之后,若Bean類上有實現(xiàn)ApplicationContextAware接口,則執(zhí)行其setApplicationContext()方法,接著才繼續(xù)進行BeanPostProcessors的processBeforeInitialization()及之后的流程。

          下面就給出一簡單demo,以供參考:

          public class CommonBean implements BeanNameAware, BeanFactoryAware,

                 ApplicationContextAware, BeanPostProcessor {

              public void setBeanName(String name) {

                 System.out.println("This is setBeanName method!");

              }

              public void setBeanFactory(BeanFactory beanFactory) throws BeansException {

                 System.out.println("This is setBeanFactory method!");

              }

              public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

                 System.out.println("This is setApplicationContext method!");

              }

              public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

                 System.out.println("This is postProcessAfterInitialization method!");

                 return bean;

              }

              public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

                 System.out.println("This is postProcessBeforeInitialization method!");

                 return bean;

              }

              public void initBean(){

                 System.out.println("This is initBean method!");

              }

              public void destroyBean(){

                 System.out.println("This is destroyBean method!");

              }

          }

          在context.getBean(“commonBean”)執(zhí)行時,輸出結(jié)果:

          This is setBeanName method!

          This is setBeanFactory method!

          This is setApplicationContext method!

          This is initBean method!

          This is postProcessBeforeInitialization method!

          This is postProcessAfterInitialization method!

           

           

          本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/prince2270/archive/2008/09/27/2986231.aspx

          posted on 2009-08-26 14:28 super_nini 閱讀(220) 評論(0)  編輯  收藏

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


          網(wǎng)站導航:
           
          <2009年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桐梓县| 将乐县| 吴忠市| 凭祥市| 安丘市| 阿坝县| 大安市| 盐池县| 侯马市| 鄱阳县| 恩平市| 玉树县| 太白县| 嘉义市| 华亭县| 托里县| 白玉县| 泾源县| 噶尔县| 平顶山市| 德庆县| 灵宝市| 上虞市| 阿拉善盟| 伊通| 潮州市| 二连浩特市| 桐乡市| 高雄市| 衡阳县| 镇坪县| 通河县| 四川省| 荃湾区| 泰兴市| 濮阳县| 会东县| 昌都县| 东山县| 南昌县| 仙游县|