在Kotlin函数中使用@Qualifier
在Kotlin中,函数参数始终是阻止在参数级使用@Qualifier()
的值。
如果有人想在同一个应用程序中经常访问的不同数据库的配置类中创建多个DataSource
,那么组织这个的推荐方法是什么?
在Kotlin中不允许执行以下在Java中相当常见的操作。
@Configuration class DatabaseAdminConfig { @Bean @ConfigurationProperties(prefix = "spring.ds_admin") fun adminDataSource(): DataSource { return DataSourceBuilder.create().build() } @Bean fun adminJdbcTemplate(@Qualifier("adminDataSource") dsAdminDb: DataSource): JdbcTemplate { return JdbcTemplate(dsAdminDb) } @ConfigurationProperties(prefix = "spring.ds_widget") fun widgetDataSource(): DataSource { return DataSourceBuilder.create().build() } @Bean fun widgetJdbcTemplate(@Qualifier("widgetDataSource") widgetDataSource: DataSource): JdbcTemplate { return JdbcTemplate(widgetDataSource) } }
没有必要将相同的类的依赖注入Spring中需要依赖的方法中。 您可以直接调用该方法。
@Configuration class DatabaseAdminConfig { @Bean @ConfigurationProperties(prefix = "spring.ds_admin") fun adminDataSource() = DataSourceBuilder.create().build() @Bean fun adminJdbcTemplate() = JdbcTemplate(adminDataSource()) @Bean @ConfigurationProperties(prefix = "spring.ds_widget") fun widgetDataSource() = DataSourceBuilder.create().build() @Bean fun widgetJdbcTemplate() = JdbcTemplate(widgetDataSource()) }
PS:函数表达式体(如上所述)使Spring Configuration类看起来更简洁。
PPS: @Qualifier
完全适合我。 我只是测试它。
PPPS:为了完整性来解决特定的问题,正如我所评论的那样:您必须无意中导入了javax.inject.Qualifier
注释,这是行不通的。 你需要导入工作的org.springframework.beans.factory.annotation.Qualifier
- JUnit,@ControllerAdvice和缺少Kotlin中检查的异常
- 使用@ExceptionHandler处理spring安全认证异常
- 在@Transactional方法调用期间,初始化期间Bean属性不为null变为null
- IntelliJ社区找不到Web应用程序工件来生成WAR
- Spring MVC控制器PathVariables上的Java bean验证
- Kotlin编译器返回:未解决的引用:Spring 5.0中的springframework
- Kotlin + SpringBoot 2.0.0-M4失败tu加载应用程序上下文(BeanCreationException)
- JsonView在Spring + Kotlin中
- ReactiveCrudRespository永远不会从SaveAll返回