注意:没有SpringBoot。只有Spring框架。
我在springboot项目中看到了@ConfigurationProperties
可以使用,但是在spring framework项目中却无法使用@Value
,看起来@Value
注解无法正确解析列表。
下面是一个示例项目:https://github.com/KiranMohan/spring-yaml。
为了加载yaml文件,我使用了YamlPropertiesFactoryBean
。
代码在junit ExampleTest
类中进行了测试。
输出
log.debug("myList: {}",example.getMyList());
是
调试[main] org.ktest.示例测试:我的列表:[${示例.我的列表}]
示例yaml:
example:
enabled: true
name: "org.ktest"
myArray: >
abc,
def
myList:
- "ghi"
- "jkl"
示例代码:
@Configuration
@PropertySource(value = "classpath:example.yml", factory = YamlPropertySourceFactory.class)
public class Example {
@Value("${example.enabled}")
private boolean enabled;
@Value("${example.name}")
private String name;
@Value("${example.myArray}")
private String[] myArray;
@Value("${example.myList}")
private List<String> myList;
1条答案
按热度按时间0yg35tkg1#
您的
YamlPropertySourceFactory
使用YamlPropertiesFactoryBean
,其Javadoc声明列表被拆分为具有
[]
解除引用器的属性键,例如以下YAML:会变成这样的属性:
这也在这里的Spring文档中提到。
换句话说,使用这些类型,您不能通过属性解析将
example.myList
YAML元素输入List
。Spring文档也提到了这一点。
可以使用Sping Boot 的
Binder
类将使用[index]
表示法的属性绑定到JavaList
或Set
对象。您可以尝试查看该类是如何执行此操作的,并在您自己的代码中重现它。