面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道

java開發、後端服務開發、程序員、spring面試

spring面試經常遇到這樣的問題,其實業務開發中Bean初始化方法也經常用到,幫助我們初始化一些業務邏輯數據

環境 jdk1.8、springboot、idea

尷尬的面試經歷

面試官:說下spring的Bean初始化方法的2種方式程序汪汪:不知道面試官:(鄙視眼神)那你可以回家等我們的消息了

代碼案例

【方式一】實現接口方式InitializingBean

【方式二】通過xml配置方式<bean>init-method="myInit" /bean>/<bean>

運行結果

spring源碼分析

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactoryinvokeInitMethods方法 【自己可以找下】

注意這裡是直接通過Bean的方法去調用afterPropertiesSet

這裡是<bean>執行的地方/<bean>

下面是debug的信息

通過反射java.lang.reflect.Method的invoke方法去執行

DisposableBean和 destroy-method="myDestroy" 的源碼也是一個Bean方法直接調用,一個反射destroy-method

總結

Spring 2種Bean初始方法的執行方式,可以同時執行,接口方式InitializingBean先執行,配置init-method方式後執行,詳情請見spring源碼執行效率分析,接口InitializingBean方式比 通過反射配置init-method方式快。其他特性請debug進去自己看看,源碼還是要看看的。

我的其他技術文章,歡迎一起學習交流

【最近更新】 【最近更新】 【最近更新】