面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

java、程序員、後端服務開發、Spring

一個業務框架的特殊功能必須藉助FactoryBean來實現代理功能

目測一般開發不會接觸到

面試過程

  • 面試官:說下Spring的FactoryBean
  • 程序汪汪:不知道,我就知道有個BeanFactory
  • 面試官:你工作好多年了,(嫌棄的眼神)那你可以回去等電話

面試建議:不要光簡單說 控制反轉、依賴注入,面向切面這些高逼格的詞語,多講下spring裡的BeanFactory及bean生命週期相關的接口 等具體接口能力(學習模仿spring的優秀接口設計能力,我也一直在研究中)

知識準備

spring、spring的IOC、BeanFactory、FactoryBean

BeanFactory

  • 是一個工廠類(接口),用於管理Bean的一個工廠。在Spring中,BeanFactory是IOC容器的核心接口,它包含了:實例化、定位、配置對象及創建這些對象之間的依賴。
  • 提供了最基本的IOC容器功能。接口定義了IOC容器最基本形式,並且提供了IOC容器所應該遵守的基本服務契約。
  • Spring通過BeanFactory來解決bean之間的依賴問題,達到松耦合。在沒有beanFactory前都是手動new來實例化太苦逼了,beanFactory方便bean生命週期進行各種管理
  • beanFactory的結構
面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

  • 基本方法的解釋
面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

  • BeanFacotory的子接口
面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

FactoryBean

是一個Bean,區別於普通的Bean,是實現了FactoryBean接口的,獲取此類型Bean實際上是FactoryBean的getObject()返回的對象,不是FactoryBean本身。

場景:代理功能,如對該對象的所有方法做個攔截,日誌等等。

一般實際開發中,會同時實現FactoryBean、InitializingBean兩個接口,一個用來生成代理對象,一個用來返回代理對象。

  • XXXFactoryBean implements FactoryBean, InitializingBean 【多數據源、多事務類型場景】
面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

  • org.springframework.orm.ibatis.SqlMapClientFactoryBean的官方套路例子
面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

代碼案例

  • 某業務工廠Bean
面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

  • 初始化生成代理對象
面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

  • 通過getObject()方法返回代理對象
  • isSingleton是true單例
  • getObjecType()返回的代理的類型,根據實際業務返回特定類型
面試官:說下Spring的FactoryBean,程序員:我只聽說Bean工廠

總結

  • 搞清楚BeanFactory,就搞明白了spring的IOC的核心
  • 系統需要實現特定代理功能,spring的FactoryBean提供了這樣的能力

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

  • 【最近更新】

  • 【最近更新】

  • 【最近更新】








分享到:


相關文章: