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

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

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

環境 jdk1.8、springboot、idea

尷尬的面試經歷

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

代碼案例

  • 【方式一】實現接口方式InitializingBean
面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道

  • 【方式二】通過xml配置方式init-method="myInit" /bean>
面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道

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

spring源碼分析

  • org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactoryinvokeInitMethods方法 【自己可以找下】
面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道

  • 注意這裡是直接通過Bean的方法去調用afterPropertiesSet
面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道

  • 這裡是執行的地方
面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道

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

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

  • 通過反射java.lang.reflect.Method的invoke方法去執行
面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道

  • DisposableBean和 destroy-method="myDestroy" 的源碼
  • 也是一個Bean方法直接調用,一個反射destroy-method
面試官:說下spring的Bean初始化方法的2種方式 程序員:不知道

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

總結

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

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

  • 【最近更新】

  • 【最近更新】

  • 【最近更新】








分享到:


相關文章: