bean的生命週期分為三個階段:bean建立—初始化----銷毀的過程
在bean建立之後,我們可以在bean的初始化和銷毀的前後對bean做一些處理,加入我們自己的邏輯,以下四種方式可以讓我們在bean初始化和銷毀的時候執行邏輯:
1)、指定初始化和銷毀方法;通過@bean指定init-method和destroy-method;
2)、通過讓bean實現initializingbean(定義初始化邏輯),disposablebean(定義銷毀邏輯);
3)、可以使用jsr250;
@postconstruct:在bean建立完成並且屬性賦值完成;來執行初始化方法
@predestroy:在容器銷毀bean之前通知我們進行清理工作
4)、beanpostprocessor【inte***ce】:bean的後置處理器;
在bean初始化前後進行一些處理工作;
postprocessbeforeinitialization:在初始化之前工作
postprocessafterinitialization:在初始化之後工作
我們可以自定義初始化和銷毀方法,使容器在bean進行到當前生命週期的時候來呼叫我們自定義的初始化和銷毀方法。我們在實體類中定義初始化和銷毀方法,可以加入自己的邏輯,然後建立物件的時候,通過註解@bean(initmethod=「init」,destroymethod=「detory」)來指明實體類中的初始化和銷毀方法分別是哪個。
@componentscan("com.example.bean")
@configuration
public class mainconfigoflifecycle
}
在實體類中定義初始化和銷毀方法,可以加入自己的邏輯
@component
public class car
public void init()
public void detory()
}
對於建立單例項物件和建立多例項物件,初始化和銷毀的時機是不同的
單例項:在容器啟動的時候建立物件
多例項:在每次獲取的時候建立物件
單例項在容器啟動的時候就建立,以後就不需再進行操作。
對於多例項,為了避免資源浪費和效能,所以只在呼叫的時候才建立。
呼叫順序
beanpostprocessor.postprocessbeforeinitialization
初始化:
物件建立完成,並賦值好,呼叫初始化方法。。。
beanpostprocessor.postprocessafterinitialization
銷毀:單例項:容器關閉的時候
多例項:容器不會管理這個bean;容器不會呼叫銷毀方法;
讓實體類繼承initializingbean,disposablebean介面,並實現其方法即可
@component
public class cat implements initializingbean,disposablebean
//銷毀方法
@override
public void destroy() throws exception
//初始化方法
@override
public void afterpropertiesset() throws exception
}
遍歷得到容器中所有的beanpostprocessor;挨個執行beforeinitialization,
一但返回null,跳出for迴圈,不會執行後面的beanpostprocessor.postprocessorsbeforeinitialization
spring底層對 beanpostprocessor 的使用;
bean賦值,注入其他元件,@autowired,生命週期註解功能,@async,*** beanpostprocessor;
@component
//@autowired
public dog()
//物件建立並賦值之後呼叫
@postconstruct
public void init()
//容器移除物件之前
@predestroy
public void detory()
@override
// todo auto-generated method stub
}}
spring原始碼分析 堆記憶體中建立bean物件
bean的生命週期中首先是在記憶體中開闢儲存空間,然後反射建立物件,建立物件後,依賴注入,設定bean的屬性,初始化bean,最後 放入快取中,返回bean物件,這裡我們分析一下第一步,bean的建立 準備工作 建立乙個student類,新增註解component component student...
Spring原始碼分析(二)
針對spring中bean初始化時擴充套件類執行順序進行分析 通過getbean逐層最終到bean例項化前後呼叫的方法,主要是aware介面 beanpostprocessor initializingbean init method的呼叫順序 abstractbeanfactory dogetbe...
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...