Spring注入util:在Kotlin中映射types安全

我在XML中有几个bean定义来存储我的SQL外部。 我想把它们作为Map注入到Kotlin中Map但是到目前为止,我只能将它注入到Map 。 有没有一种方法来确保types安全。 将它注入为Map会感觉到贫民窟。

当我尝试Map甚至Map我得到不符合条件豆find…

XML示例

           

注入服务

 @Service open class JdbcBrandService @Autowired constructor( private val namedJdbcTemplate: NamedParameterJdbcTemplate ): BrandService { companion object { val logger = LoggerFactory.getLogger(JdbcBrandService::class.java) } @Autowired @Qualifier(value = "brandSql") private lateinit var queries: Map /// methods and what not go here } 

在Java中,我可以用类似下面这样的方式逃脱,但Kotlin的types系统更严格似乎阻止了这一点。

 @RestController public class JavaBrandController { private final Map brandSql; @Autowired public JavaBrandController(@Qualifier("brandSql") Map sql) { this.brandSql = sql; } @GetMapping("/javaBrands") public Map getBrandSql() { return this.brandSql; } } 

就个人而言,将Bean放置在像Map这样的genericstypes中,感觉很奇怪。 当你需要其他地图时,会造成混乱。

我要做的就是创建一个容器类,它包含对地图的引用,所以你有一个适当的types来引用。

例:

 class SqlConfig(val map: Map) 

然后在你的xml中创建这个types的bean:

           

现在,您可以根据需要以适当的方式自动装入,方法如下:

 @Autowired @Qualifier(value = "sqlConfig") // <-- the qualifier is no longer needed private lateinit var queries: SqlConfig 
    Interesting Posts