【发布时间】:2014-10-03 21:30:23
【问题描述】:
如何使用@Values 注解填充值映射,无需在 applicationContext.xml 中定义任何内容 或任何其他 XML 文件。
我使用的是spring boot,它没有任何 XML文件,我也不想要任何XML文件,所以请不要告诉我在XML等中声明任何属性阅读器bean .
另外,这是一个属性注入问题 - 请不要建议使用数据库来存储数据 - 这不是答案,而且无论如何都不适合我的情况。
另外,我也不能使用 YAML(由于部署/操作要求)。
我已尝试声明此注入:
@Value("${myprop}")
Map<Integer, String> map;
还有这个
@Value("${myprop.*}")
Map<Integer, String> map;
这些条目application.properties:
myprop.1=One
myprop.2=Two
myprop.3=Three
然后尝试
myprop[1]=One
myprop[2]=Two
myprop[3]=Three
但不好 - 只是爆炸
无法自动装配字段:...无法解析占位符“myprop”
我找到了一个解决方法,将注入的String[] 指定为key1:value1,key2:value2,...,然后我在代码中解析它,但我不想这样做,因为a)它是更多代码,b)列表是会很长,一行中的所有对都将难以阅读和维护。
有没有办法从多个属性自动构建地图?
我不在乎属性名称是什么,字段类型或注解是什么;我只是想为每个属性注入一个键/值对。
【问题讨论】:
-
据我所知,没有内置配置。这似乎是一个非常具体的用例。
Map的键是否与*匹配的所有内容匹配? -
@SotiriosDelimanolis 那是我的意图。虽然我不在乎属性的格式是什么;只要它是每行一个键/值对,它可以是任何格式、任何字段类型、任何注释。我应该补充一点,我也不可能使用 YAML。
-
@stan 谢谢,但链接的答案使用 XML 来声明自定义属性加载器,根据我问题第一行中的粗体字,这不是一个有用的答案
-
你解决了吗?
标签: java spring properties