Java 面試擴展:spring bean生命週期

實例化 Bean 對象。設置 Bean 屬性。如果我們通過各種 Aware 接口聲明瞭依賴關係,則會注入 Bean 對容器基礎設施層面的依賴。具體包括 BeanNameAware、BeanFactoryAware 和 ApplicationContextAware,分別會注入 Bean ID、Bean Factory 或者 ApplicationContext。調用 BeanPostProcessor 的前置初始化方法 postProcessBeforeInitialization。如果實現了 InitializingBean 接口,則會調用 afterPropertiesSet 方法。調用 Bean 自身定義的 init 方法。調用 BeanPostProcessor 的後置初始化方法 postProcessAfterInitialization。創建過程完畢。

 

Spring Bean 有五個作用域:

Singleton,這是 Spring 的默認作用域,也就是爲每個 IOC 容器創建唯一的一個 Bean 實例。

Prototype,針對每個 getBean 請求,容器都會單獨創建一個 Bean 實例。

如果是 Web 容器,則支持另外三種作用域:

Request,爲每個 HTTP 請求創建單獨的 Bean 實例。,爲每個請求創建一個bean實例。

Session,很顯然 Bean 實例的作用域是 Session 範圍。爲每個會話創建一個bean實例。

GlobalSession,用於 Portlet 容器,因爲每個 Portlet 有單獨的 Session,GlobalSession 提供一個全局性的 HTTP Session。

他們是什麼時候創建的:
1一個單例的bean,而且lazy-init屬性爲false(默認),在Application Context創建的時候構造
2一個單例的bean,lazy-init屬性設置爲true,那麼,它在第一次需要的時候被構造.
3 其他scope的bean,都是在第一次需要使用的時候創建

他們是什麼時候銷燬的:
1 單例的bean始終 存在與application context中, 只有當 application 終結的時候,纔會銷燬
2 和其他scope相比,Spring並沒有管理prototype實例完整的生命週期,在實例化,配置,組裝對象交給應用後,spring不再管理.只要bean本身不持有對另一個資源(如數據庫連接或會話對象)的引用,只要刪除了對該對象的所有引用或對象超出範圍,就會立即收集垃圾.
3 Request: 每次客戶端請求都會創建一個新的bean實例,一旦這個請求結束,實例就會離開scope,被垃圾回收.
4 Session: 如果用戶結束了他的會話,那麼這個bean實例會被GC.

 

Spring AOP:

Aspect,通常叫作方面,

Join Point,它是 Aspect 可以切入的特定點,在 Spring 裏面只有方法可以作爲 Join Point。

Advice,它定義了切面中能夠採取的動作。

Pointcut 是解決了切面編程中的 Where 問題,Advice 則是明確了切面編程中的 What,也就是做什麼

 

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