当前位置: 首页 > 知识库问答 >
问题:

来自Bean方法的Immutabel配置属性

何安宜
2023-03-14

您可以用Spring以各种方式创建ConfigurationProperties-对象。

一种方法是将@ConfigurationProperties-注释添加到@Bean-声明中,如下所示:

@Bean
@ConfigurationProperties("my.property.group")
public MyProperties myProperties() {
   return new MyProperties();
}

它将从MyProperties-类创建一个bean,然后使用其setter用配置文件中的值填充其成员。

您也可以直接在MyProperties-Object上进行注释,如下所示:

@ConfigurationProperties("my.property.group")
public class MyProperties {
    @Getter @Setter private String myFirstValue;
    @Getter @Setter private String mySecondValue;
}

通过将@EnableConfigurationProperties(MyProperties.class)放置到任何加载的配置来创建它。

还可以使用@ConstructorBinding

 @ConfigurationProperties("my.property.group")
 @ConstructorBinding
 public class MyProperties {
     @Getter private final String myFirstValue;
     @Getter private final String mySecondValue;
     
     public MyProperties(String myFirstValue, String mySecondValue) {
         this.myFirstValue = myFirstValue;
         this.mySecondValue = mySecondValue;
     }
 }

但是如何结合第一个@Bean方法创建不可变的ConfigurationProperties呢?

我尝试过这样的东西:

 @Bean
 @ConfigurationProperties("my.property.group")
 // @ConstructorBinding <---- This is not applicable to methods
 public MyProperties myProperties(String myFirstValue, String mySecondValue) {
     return new MyProperties(myFirstValue, mySecondValue);
 }

它告诉我,它不能自动调用参数,我将考虑声明一些类型为“<代码>字符串> <代码>的bean。

共有1个答案

能正青
2023-03-14

@ConstructorBindingSpring-Boot参考文档中,说明:

要使用构造函数绑定,必须使用@EnableConfigurationProperties或配置属性扫描启用类。您不能将构造函数绑定与常规Spring机制创建的bean一起使用。@组件Bean,通过@Bean方法创建的Bean或使用@导入加载的Bean)

Spring Boot文档可以在这里找到。

也许这里的一些答案足以解决你的问题。

 类似资料:
  • 问题内容: 是否可以通过读取另一个bean的属性来设置一个bean的属性?例如,假设我有: 我希望Spring实例化这两个类,并调用A的setList方法,并传入调用B的getList方法的结果。Spring配置可能类似于: las,这种伪造的XML不起作用。 为什么不将B注入A?因为我不想引入额外的依赖关系。A仅依赖列表,而不依赖B。 问题答案: 如果你使用的是spring 3.0,还可以使用新

  • 出于某种原因,每当我尝试将属性添加到此类时,应用程序就会中断。无法确定需要配置哪个构造函数。 启动应用程序上下文时出错。要显示条件,请报告启用“调试”后重新运行应用程序。2021-12-17 00:40:17.874错误21160 --- [ main]o. s. b. d.日志失败分析记者: 应用程序启动失败 说明: com.example.demo.security.config.WebSec

  • 我在如下配置类中创建了一个bean: 在FoodConfig.java 在食品服务课程中,我需要访问食品配置。所以我自动连接了食品配置。 试图从我的FoodServiceTest类访问AbstractFoodService类中的someParam时,我得到一个Nullpointer异常。 然而,若我在AbstractFoodServiceClass的构造函数中注入FoodConfig,它就会工作。

  • 问题内容: 是否可以通过读取另一个bean的属性来设置一个bean的属性?例如,假设我有: 我希望Spring实例化这两个类,并调用A的setList方法,并传入调用B的getList方法的结果。Spring配置可能类似于: las,这种伪造的XML不起作用。 为什么不将B注入A?因为我不想引入额外的依赖关系。A仅依赖列表,而不依赖B。 问题答案: 除了@Kevin的答案,如果您使用的是sprin

  • 本文向大家介绍Spring Boot配置特定属性spring.profiles的方法,包括了Spring Boot配置特定属性spring.profiles的方法的使用技巧和注意事项,需要的朋友参考一下 Spring Boot配置特定属性spring.profiles SpringBoot能使用application- {你的自定义profile名称myProfileName} .properti

  • 问题内容: 是否可以在用Java编写的Spring配置中使用Spring的注释? 例如: 显然,不能直接实例化DataSource接口,但是为了简化起见,我在这里直接实例化了它。当前,当我尝试上述操作时,数据源对象仍然为null,并且Spring不会对其进行自动接线。 我通过返回一个Hibernate 对象成功地工作了。 所以我的问题特别是:是否有办法针对a ?或更笼统地说,在Spring Jav