Java 使用列表类型重写@ConfigurationProperties中的setter
我正在使用Spring Boot 1.5.15,在读取带有注释Java 使用列表类型重写@ConfigurationProperties中的setter,java,spring,spring-boot,configurationproperties,Java,Spring,Spring Boot,Configurationproperties,我正在使用Spring Boot 1.5.15,在读取带有注释@ConfigurationProperties的bean时遇到了一些问题 具体来说,我尝试使用以下bean @ConfigurationProperties(prefix=“permissions”) 公共类权限{ 私有列表权限; 私人设置许可证; 公共列表getPermissions(){ 返回此权限; } public void setPermissions(列出权限){ this.permissionsSet=新哈希集(权限)
@ConfigurationProperties
的bean时遇到了一些问题
具体来说,我尝试使用以下bean
@ConfigurationProperties(prefix=“permissions”)
公共类权限{
私有列表权限;
私人设置许可证;
公共列表getPermissions(){
返回此权限;
}
public void setPermissions(列出权限){
this.permissionsSet=新哈希集(权限)
this.permissions=权限;
}
//其他代码
}
相应的application.yml
如下所示
permissions:
permissions:
- ROLE_1
- ROLE_2
我面临的问题是,成员permissionsSet
始终为空。我调试了应用程序,发现Spring使用以下工作流创建bean
非常感谢。这是否正确值得商榷,正如你所注意到的,这就是所发生的事情 如果您只有一小部分权限(比如少数),最简单的解决方案就是让getter返回
return Sets.newHashset(permissions)
等等。在大多数情况下,性能缺陷并不重要
如果您担心性能问题,您可以将权限设置为null
并在第一次使用getter时正确初始化它(即从权限初始化它,如果它为null)
或者,您可以尝试@PostConstruct
(有关官方文档,请参阅)或其他选项,在构造后使用自定义代码初始化bean以初始化权限集
,但是对于这个例子,我会考虑这种过度。为什么不直接用一组来设置“权限”?因为Spring不允许直接将值注入到<代码> SET/COD>中:(有趣的是,这项功能似乎是在后来的版本中添加的,因为我见过这样做的代码。这是一个玩具示例,不是我正在使用的真实代码。感谢@PostConstruct
提示,但我还要求提供一些文档。你有吗?@riccardo.cardin抱歉,我没有实现Con的文档figurationProperties注入。添加了一个指向正式文档的链接,用于后期构造。