Java 使用列表类型重写@ConfigurationProperties中的setter

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=新哈希集(权限)

我正在使用Spring Boot 1.5.15,在读取带有注释
@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

  • 默认构造函数调用
  • 用空列表调用Setter
  • 在setter调用后为列表注入正确的值
  • 这是正确的行为吗?我试图在文档中找到任何参考资料,但什么也找不到

    有没有办法解决这个问题


    非常感谢。

    这是否正确值得商榷,正如你所注意到的,这就是所发生的事情

    如果您只有一小部分权限(比如少数),最简单的解决方案就是让getter返回

    return Sets.newHashset(permissions) 
    
    等等。在大多数情况下,性能缺陷并不重要

    如果您担心性能问题,您可以将
    权限设置为
    null
    并在第一次使用getter时正确初始化它(即从
    权限初始化它,如果它为null)


    或者,您可以尝试
    @PostConstruct
    (有关官方文档,请参阅)或其他选项,在构造后使用自定义代码初始化bean以初始化
    权限集
    ,但是对于这个例子,我会考虑这种过度。

    为什么不直接用一组来设置“权限”?因为Spring不允许直接将值注入到<代码> SET/COD>中:(有趣的是,这项功能似乎是在后来的版本中添加的,因为我见过这样做的代码。这是一个玩具示例,不是我正在使用的真实代码。感谢
    @PostConstruct
    提示,但我还要求提供一些文档。你有吗?@riccardo.cardin抱歉,我没有实现Con的文档figurationProperties注入。添加了一个指向正式文档的链接,用于后期构造。