? @NestedConfigurationProperty
注解在Spring Boot中用于标记配置类中的嵌套属性。这个注解通常用于当一个配置类拥有另一个非标量(非简单值,如自定义类型)属性时,指明该属性也应该被视为配置属性进行处理。
? @NestedConfigurationProperty
本身并不直接用于集合属性。它主要用于标记单个复杂类型的配置属性,以便Spring Boot的配置机制能够识别这些属性为嵌套的配置对象。
? ?对于集合类型的配置属性,例如List
、Set
或Map
,Spring Boot可以直接将配置文件中的值绑定到这些集合上,无需使用@NestedConfigurationProperty
。如果集合中的元素是自定义类型,Spring Boot会尝试将配置值绑定到这些自定义类型的属性上。
考虑以下配置类示例:
@ConfigurationProperties(prefix = "my")
public class MyProperties {
private List<NestedConfig> nestedConfigs;
// Getter and setter methods
public List<NestedConfig> getNestedConfigs() {
return nestedConfigs;
}
public void setNestedConfigs(List<NestedConfig> nestedConfigs) {
this.nestedConfigs = nestedConfigs;
}
public static class NestedConfig {
private String property;
// Getter and setter methods
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
}
}
在application.properties
中,你可以这样配置嵌套的集合属性:
my.nested-configs[0].property=FirstValue
my.nested-configs[1].property=SecondValue
? ?Spring Boot将会自动将配置值绑定到MyProperties
类中的nestedConfigs
列表的相应元素上。每个列表元素是NestedConfig
类型的实例,其property
属性将被设置为相应的配置值。在这种情况下,你不需要在NestedConfig
类上或其属性上使用@NestedConfigurationProperty
注解。
? 对于Map
类型的配置属性,Spring Boot可以将配置文件中的值绑定到Map
上,其中键是Map
的键,值是Map
的值。如果Map
的值是自定义类型,不需要使用@NestedConfigurationProperty
注解,Spring Boot会自动处理配置的绑定。
@ConfigurationProperties(prefix = "my")
public class MyProperties {
private Map<String, NestedConfig> nestedConfigMap;
// Getter and setter methods
public Map<String, NestedConfig> getNestedConfigMap() {
return nestedConfigMap;
}
public void setNestedConfigMap(Map<String, NestedConfig> nestedConfigMap) {
this.nestedConfigMap = nestedConfigMap;
}
public static class NestedConfig {
private String property;
// Getter and setter methods
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
}
}
在application.properties
或application.yml
中配置Map属性:
# For application.properties
my.nested-config-map.key1.property=Value1
my.nested-config-map.key2.property=Value2
or
# For application.yml
my:
nested-config-map:
key1:
property: Value1
key2:
property: Value2
? ?在这个例子中,my.nested-config-map
是一个映射,其键是String
类型,值是NestedConfig
类型。配置文件中的每个条目都会创建一个NestedConfig
实例,并将其property
属性设置为相应的配置值。
? ?在Map
集合中使用@NestedConfigurationProperty
不是必须的,因为Spring Boot已经提供了处理嵌套配置的能力。当你的配置属性是Map
类型,并且Map
的值是自定义类型时,只需确保自定义类型有正确的getter和setter方法,Spring Boot将自动进行配置绑定