【深入理解 Spring 原理】Spring Bean 的生命週期和作用域?

Spring Bean 的生命週期和作用域?

Spring Bean 的生命週期

Spring Bean 的生命週期可以分成,創建,使用,銷燬幾個過程。

Spring Bean 創建過程如下:
  1. 實例化 Bean 對象
  2. 設置 Bean 屬性
  3. 通過各種 Aware 接口聲明瞭依賴關係,則會注入 Bean 對容器基礎設施層面的依賴,包括 BeanNameAware 、BeanFactoryAware 和 ApplicationContextAware 分別注入 BeanID ,BeanFactory或者ApplicationContext
  4. 調用 BeanPostProcessor 的前置初始化方法 postProcessBeforeInitialization
  5. 如果實現了InitializingBean 接口,會調用 afterPropertiesSet 方法。
  6. 調用 Bean 自身定義的 init 方法。
  7. 調用 BeanPostprocessor 的後置初始方法 postProcessAfterInitialization。
  8. 創建過程完畢。

Spring Bean創建過程

Spring Bean 的銷燬

Spring Bean 的銷燬過程會依次調用 DisposableBean 的 destroy 方法和 Bean 自身定製的 destroy() 方法。

Spring Bean 作用域

Spring Bean 有五個作用域,最基礎的是如下兩種:

  • Singleton ,這是 Spring 的默認作用域,也就是爲每個 IOC 容器創建唯一一個 Bean 實例,也稱爲單例。
  • Prototype ,針對每個 getBean 請求,容器會單獨創建一個 Bean 實例。

從 Bean 的特點來看,Prototype 適合有狀態的 Bean ,而Singleton 則更適合無狀態的情況。

Web 容器還支持另外三種作用域

  • Request, 每個 HTTP 請求創建單獨的 Bean 實例。
  • Session ,很顯然 Bean 實例的作用域是 Session範圍。
  • GlobalSession, 用於 Portlet 有單獨的 Session,GlobalSession 提供了一個全局性的 HTTP Session。

Spring 基礎機制

  • IOC, 控制反轉(Invension of Control) ,或者叫做依賴注入(Depency Injection),通過這種機制,可以有效的改善模塊之間的緊耦合問題。
    從 Bean 創建過程可以看到,它的依賴關係都是由容器負責注入。

spring 注入的四種方式:

  1. 構造器注入
  2. setter 方法注入
  3. 基於註解注入
  • AOP,我們是通過切面編程機制,Spring 框架中的事務、日誌、安全、等功能都依賴 AOP 技術。

Spring AOP 關鍵概念

  1. Aspect , 通常叫做方面,它是跨不同 Java 類層面的橫切行邏輯。在實現形式上,可以是 XML 文件中配置的普通類,也可以是 @Aspect 註解取聲明。在運行時,Spring 框架會創建類似 Advisor 來指代它,其內部包括切入的時機(Pointcut)和動作 (Advide)
  2. Join Point 它是 Aspect 可以切入的特定點,在 Spring 裏面只有方法可以作爲 Join Point
  3. Advice ,定義了切面中能夠採取的動作。

Spring Advice結構

BeforeAdvice 和 AfterAdvice 包括他的子類接口是簡單的實現,而 Interceptor 則是所謂的攔截器,用於攔截住方法調用事件,進而採取相應動作,所以 Interceptor 是覆蓋整個方法過程調用的 Advice。通常將攔截器類型的 Advice叫做 Around ,在代碼中使用 @Arround 來標記。aop:around

image

PointCut 它負責具體定義 Aspect 被應用在哪些 Joint Point 可以通過指定具體的類名和方法名來實現。

image

程序員開發者社區

程序員開發者社區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章