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.
AbstractAutowireCapableBeanFactory的
invokeInitMethods方法 【自己可以找下】
注意這裡是直接通過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進去自己看看,源碼還是要看看的。
我的其他技術文章,歡迎一起學習交流
【最近更新】 【最近更新】 【最近更新】