RuoYi框架如何做到無實現類也能實現Bean依賴注入?

RuoYi框架如何做到無實現類也能實現Bean依賴注入?

RuoYi框架:巧妙實現無實現類Bean依賴注入

RuoYi框架以其簡潔高效的特性而聞名,但其在不顯式定義實體類的情況下實現Bean依賴注入的機制,常令開發者困惑。本文將通過分析RuoYi框架的數據源(DataSource)配置,揭示其背后的奧秘。

問題:在模仿RuoYi框架的mybatis配置時,出現“無法自動裝配,找不到’DataSource’類型的Bean”錯誤。這源于對RuoYi框架DataSource注入機制的誤解。RuoYi并非直接在MyBatis配置中定義DataSource,而是巧妙地利用了spring的依賴注入機制。

核心:RuoYi框架的DruidConfig.Java文件是關鍵。該配置類利用@Bean注解聲明方法,這些方法返回spring容器管理的Bean。DruidConfig中定義了masterDataSource和slaveDataSource兩個方法,分別創建主從數據源。

masterDataSource方法使用@ConfigurationProperties(“spring.datasource.druid.master”)注解,將application.yml或application.properties配置文件中的spring.datasource.druid.master屬性值注入到DruidProperties對象,再用此對象配置DruidDataSource,最終返回一個DataSource類型的Bean。

slaveDataSource方法類似,但增加了@ConditionalOnProperty注解,只有當配置文件中spring.datasource.druid.slave.enabled屬性值為true時,才會創建從數據源Bean。

dataSource方法則使用@Primary注解,將masterDataSource設為默認數據源,并通過DynamicDataSource整合主從數據源,提供一個統一的DataSource Bean供其他組件使用。

因此,當MyBatis配置需要DataSource時,Spring容器會自動注入dataSource方法返回的DynamicDataSource Bean。 這就是RuoYi框架無需顯式創建和管理Bean實例,即可實現Bean依賴注入的精妙之處:它利用Spring的配置類和依賴注入機制,在配置類中創建和配置Bean,然后在需要的地方自動注入。 理解@Bean、@ConfigurationProperties、@ConditionalOnProperty和@Primary注解以及Spring容器的依賴注入原理至關重要。開發者只需關注配置,無需直接管理Bean實例。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享