Trabajando con @Qualifier en las funciones de Kotlin

En Kotlin, los parameters de function son siempre valores que evitan que @Qualifier() se use en el nivel de parámetro.

Si alguien quisiera crear múltiples DataSource s en una class de configuration para diferentes bases de datos a las que se accede frecuentemente dentro de la misma aplicación, ¿cuál es la forma recomendada de organizar esto?

Hacer lo siguiente que parecía bastante común en Java no está permitido en Kotlin.

 @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) } } 

    No es necesario inyectar la dependencia de la misma class en el método que requiere esa dependencia en Spring. Simplemente puede llamar al método directamente.

     @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()) } 

    PD: los cuerpos de expresiones de funciones (como se indica más arriba) hacen que las classs de configuration de Spring sean aún más concisas.

    PPS: @Qualifier funciona totalmente bien para mí. Acabo de probarlo.

    PPPS: Y para completar el problema específico, como comenté: Debe haber importado accidentalmente la anotación javax.inject.Qualifier , que no funcionará. Necesita importar el org.springframework.beans.factory.annotation.Qualifier que funciona