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