SAMLBootstrap bean 消除了来自云配置服务器的@Value 注入

SAMLBootstrap bean wipes out @Value injection from Cloud Config Server

当我 运行 我的应用程序时,metadataFile 在创建下面的 bean 时总是 null。我有一个 Spring 云配置服务器,我看到它在我的断点之前被命中并且成功检索了 YML。

即使配置服务器关闭,SPEL 也应该提供默认值。有没有人 运行 进入 @Value 而不是在 @Bean 之前评估和注入值?我有很多年使用 XML 注释,所以也许我从来没有用注释驱动的配置来解决这个问题,但似乎很难相信我以前不会 运行 进入这个。很迷茫...

其中:

 @Configuration
 public class Test {

  @Value("${someplace.saml.idp.metadata.file:'classpath:idp-metadata.xml'}")
  String metadataFile;

 @Bean
 MetadataProvider metadataProvider() {
        if(!StringUtils.isBlank(metadataFile) && metadataFile.startsWith("classpath:/")) {
            // do some stuff 
        } else {
            File metadatFile = new File(metadataFile);
        }
 }

更新:

为了简洁起见,我缩短了上面的示例。清除配置值的罪魁祸首是这个 SAMLBootstrap bean。注释配置的 Spring SAML2 似乎需要它。

 @Bean
 SAMLBootstrap samlBootstrap() {
     return new SAMLBootstrap();
 }

更新 2(解决方案):

SAMLBootstrap bean 需要用静态声明。我在另一个 post 的最后评论中发现了这一点:Spring Bean without id or name in Java Config