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实例。