Spring教程-Bean的作用域與生命週期

echo編輯整理,歡迎轉載,轉載請聲明文章來源。歡迎添加echo微信(微信號:t2421499075)交流學習。


Spring當中當我們瞭解了Bean的基本配置之後我們可以看到我們有一個配置scope,這個就是配置我們作用域範圍的,默認值是singleton。由於我們平時一般都是使用默認作用域,所以很少有人關注,但是他確實一個很重要的知識點,面試也常有問道,比如:spring當中bean的作用域是怎麼樣的?spring中bean的生命週期請你說一下!這兩個面試題無非都是在靠我們對bean的被創建到最終銷燬過程的一個實際瞭解。

Spring Bean 作用域

Spring Bean作用域的幾種範圍如下:

作用域 描述
singleton 在spring IoC容器僅存在一個Bean實例,Bean以單例方式存在,默認值
prototype 每次從容器中調用Bean時,都返回一個新的實例,即每次調用getBean()時,相當於執行newXxxBean()
request 每次HTTP請求都會創建一個新的Bean,該作用域僅適用於WebApplicationContext環境
session 同一個HTTP Session共享一個Bean,不同Session使用不同的Bean,僅適用於WebApplicationContext環境
global-session 一般用於Portlet應用環境,該運用域僅適用於WebApplicationContext環境

Bean 生命週期的整個執行過程描述如下。

  • 1)根據配置情況調用 Bean 構造方法或工廠方法實例化 Bean。
  • 2)利用依賴注入完成 Bean 中所有屬性值的配置注入。
  • 3)如果 Bean 實現了 BeanNameAware 接口,則 Spring 調用 Bean 的 setBeanName() 方法傳入當前 Bean 的 id 值。
  • 4)如果 Bean 實現了 BeanFactoryAware 接口,則 Spring 調用 setBeanFactory() 方法傳入當前工廠實例的引用。
  • 5)如果 Bean 實現了 ApplicationContextAware 接口,則 Spring 調用 setApplicationContext() 方法傳入當前 ApplicationContext 實例的引用。
  • 6)如果 BeanPostProcessor 和 Bean 關聯,則 Spring 將調用該接口的預初始化方法 postProcessBeforeInitialzation() 對 Bean 進行加工操作,此處非常重要,Spring 的 AOP 就是利用它實現的。
  • 7)如果 Bean 實現了 InitializingBean 接口,則 Spring 將調用 afterPropertiesSet() 方法。
  • 8)如果在配置文件中通過 init-method 屬性指定了初始化方法,則調用該初始化方法。
  • 9)如果 BeanPostProcessor 和 Bean 關聯,則 Spring 將調用該接口的初始化方法 postProcessAfterInitialization()。此時,Bean 已經可以被應用系統使用了。
  • 10)如果在 中指定了該 Bean 的作用範圍爲 scope=“singleton”,則將該 Bean 放入 Spring IoC 的緩存池中,將觸發 Spring 對該 Bean 的生命週期管理;如果在 中指定了該 Bean 的作用範圍爲 scope=“prototype”,則將該 Bean 交給調用者,調用者管理該 Bean 的生命週期,Spring 不再管理該 Bean。
  • 11)如果 Bean 實現了 DisposableBean 接口,則 Spring 會調用 destory() 方法將 Spring 中的 Bean 銷燬;如果在配置文件中通過 destory-method 屬性指定了 Bean 的銷燬方法,則 Spring 將調用該方法對 Bean 進行銷燬。

###spring的作用域其實是直接影響我們bean的生命週期的,如果我們配置的時候不注意可能導致我們的bean出現問題。

  • singleton這種類型是單利bean,如果我們使用它,證明我們當前的bean只要實例化了,就會隨着項目生死
  • prototype是工廠模式bean,如果我們選用他,業務執行完成之後容器將不再管理該bean,這對應生產的bean就看最終項目哪裏去使用完成,最終無應用就會回收
  • request是針對每次請求的,請求結束我們的bean也就隨之被銷燬
  • session範圍的bean就會隨着session的生命週期交替
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章