在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