java開發、後端服務開發、程序員、spring面試
- spring面試經常遇到這樣的問題,其實業務開發中Bean初始化方法也經常用到,幫助我們初始化一些業務邏輯數據
環境 jdk1.8、springboot、idea
尷尬的面試經歷
- 面試官:說下spring的Bean初始化方法的2種方式
- 程序汪汪:不知道
- 面試官:(鄙視眼神)那你可以回家等我們的消息了
代碼案例
- 【方式一】實現接口方式InitializingBean
![面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道](http://p2.ttnews.xyz/loading.gif)
- 【方式二】通過xml配置方式
init-method="myInit" /bean>
![面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道](http://p2.ttnews.xyz/loading.gif)
- 運行結果
spring源碼分析
- org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory的invokeInitMethods方法 【自己可以找下】
- 注意這裡是直接通過Bean的方法去調用afterPropertiesSet
- 這裡是
執行的地方
- 下面是debug的信息
- 通過反射java.lang.reflect.Method的invoke方法去執行
- DisposableBean和 destroy-method="myDestroy" 的源碼
- 也是一個Bean方法直接調用,一個反射destroy-method
總結
- Spring 2種Bean初始方法的執行方式,可以同時執行,接口方式InitializingBean先執行,配置init-method方式後執行,詳情請見spring源碼
- 執行效率分析,接口InitializingBean方式比 通過反射配置init-method方式快。
- 其他特性請debug進去自己看看,源碼還是要看看的。
我的其他技術文章,歡迎一起學習交流
- 【最近更新】
- 【最近更新】
- 【最近更新】
閱讀更多 程序汪汪 的文章