RuoYi框架中Bean依赖注入:DataSource是如何在没有显式定义实体类的情况下注入的?

RuoYi框架中Bean依赖注入:DataSource是如何在没有显式定义实体类的情况下注入的?

RuoYi框架巧妙的Bean依赖注入机制:DataSource无需显式定义

RuoYi框架以其简洁高效的代码风格而闻名,但其Bean依赖注入的实现方式,特别是DataSource的注入,常常让初学者困惑。本文将深入剖析RuoYi框架如何实现DataSource的依赖注入,无需显式定义实体类。

问题:DataSource的隐式注入

在模仿RuoYi框架的com.ruoyi.framework.config.mybatisconfig时,开发者可能会遇到找不到DataSource类型的Bean的错误。然而,代码中并没有显式的DataSource实体类定义,这正是问题的关键所在。

解决方案:spring的@Configuration和@Bean注解

RuoYi框架巧妙地利用了spring框架的@Configuration和@Bean注解。以DruidConfig.Java为例,关键代码如下:

@Configuration public class DruidConfig {     @Bean     @ConfigurationProperties("spring.datasource.druid.master")     public DataSource masterDataSource(DruidProperties druidProperties) {         DruidDataSource dataSource = DruidDataSourceBuilder.create().build();         return druidProperties.dataSource(dataSource);     }      // ... (slaveDataSource方法类似) ...      @Bean(name = "dynamicDataSource")     @Primary     public DynamicDataSource dataSource(DataSource masterDataSource) {         Map<Object, Object> targetDataSources = new HashMap<>();         targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);         // ... (设置slaveDataSource) ...         return new DynamicDataSource(masterDataSource, targetDataSources);     } }

@Configuration注解将DruidConfig类标记为Spring配置类。@Bean注解则表明masterDataSource和slaveDataSource方法会创建并返回DataSource类型的Bean。spring容器会在需要注入DataSource类型Bean时,自动调用这些方法,并将返回的Bean注入到依赖的地方。

slaveDataSource方法使用了@ConditionalOnProperty注解,只有当配置文件中spring.datasource.druid.slave.enabled属性为true时,才会创建slaveDataSource Bean。

dataSource方法创建dynamicDataSource Bean,它依赖于masterDataSource Bean。Spring容器会先创建masterDataSource Bean,然后利用它创建dynamicDataSource Bean。

结论:Spring的自动装配机制

RuoYi框架并非通过显式定义DataSource实体类实现依赖注入,而是利用Spring容器的自动装配机制,在DruidConfig类中定义Bean的创建方法,并通过@Configuration和@Bean注解实现Bean的依赖注入。 如果开发者遇到错误,很可能是DruidConfig类或相关配置缺失,导致Spring容器无法找到DataSource类型的Bean。 务必检查项目配置,确保DruidConfig类正确加载并运行。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享