我正在使用Spring Boot 1.5.15,在读取带有注释的bean时遇到一些麻烦@ConfigurationProperties
。
详细地说,我正在尝试使用以下bean。
@ConfigurationProperties(prefix = "permissions")
public class Permissions {
private List<String> permissions;
private Set<String> permissionsSet;
public List<String> getPermissions() {
return this.permissions;
}
public void setPermissions(List<String> permissions) {
this.permissionsSet = new HashSet<>(permissions)
this.permissions = permissions;
}
// Other code
}
相应application.yml
的如下。
permissions:
permissions:
- ROLE_1
- ROLE_2
我面临的问题是该成员permissionsSet
始终为空。我调试了该应用程序,发现Spring使用以下工作流来创建Bean。
这是正确的行为吗?我想在文档中找到任何参考,但找不到任何东西。
有什么办法解决这个问题?
非常感谢。
正如您所注意到的,是否正确尚有争议,这就是发生的事情。
如果您只有少量权限(例如少数),最简单的解决方案是让getter返回
return Sets.newHashset(permissions)
或类似的东西。在大多数情况下,性能缺陷并不重要。
如果您担心性能问题,则可以将permissionsSet
as null
初始化为第一次使用getter并正确对其进行初始化(即从permissions
null开始对其进行初始化)。
另外,您可以尝试@PostConstruct
(参见此处以获取官方文档)或其他选项,以在构造后使用自定义代码来初始化Bean permissionSet
,但是对于该示例,我认为这过于刻板。
这是一个玩具示例,不是我正在使用的真实代码。感谢您的
@PostConstruct
提示,但我也要求提供一些文档。有吗@ riccardo.card抱歉,我没有有关ConfigurationProperties注入的实现的文档。添加了指向PostConstruct官方文档的链接。