简单分析@NestedConfigurationProperty的作用

看源码的时候,碰到这个注解@NestedConfigurationProperty,之前知道@ConfigurationProperty是设置值的,但是nested就不清楚了。
分析如下
查看源码

/**
 * Indicates that a field in a {@link ConfigurationProperties @ConfigurationProperties}
 * object should be treated as if it were a nested type. This annotation has no bearing on
 * the actual binding processes, but it is used by the
 * {@code spring-boot-configuration-processor} as a hint that a field is not bound as a
 * single value. When this is specified, a nested group is created for the field and its
 * type is harvested.
 */

意思就是一个嵌套类型,使用它了之后就不是一个简单单值了,一般是比较复杂的类型。另外,使用了这个注解的类,代表是不在本文件中,而是在其他地方。

@ConfigurationProperties
public class Outer {
    private Inner qsm1;
    private Inner qsm2;
    // getter, setter ...
    public static class Inner {
        private String name;
        // getter, setter ...
    }
}

若Inner类是一个单独的文件,不在Outer 中,那么使用@NestedConfigurationProperty

@ConfigurationProperties
public class Outer {
    @NestedConfigurationProperty
    private Inner qsm1; 
    @NestedConfigurationProperty
    private Inner qsm2;
}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @nestedconfigurationproperty是Spring Boot中的注解,用于表示一个嵌套的配置属性。它可以用于@ConfigurationProperties注解中的属性,表示该属性是一个嵌套的配置属性,需要进一步解析。例如: @ConfigurationProperties(prefix = "myconfig") public class MyConfig { @NestedConfigurationProperty private SubConfig subConfig; // getters and setters } 在上面的例子中,MyConfig类有一个名为subConfig的属性,它被标记为@NestedConfigurationProperty。这意味着subConfig是一个嵌套的配置属性,需要进一步解析。SubConfig类也可以使用@ConfigurationProperties注解来指定它的属性。 使用@NestedConfigurationProperty注解可以使配置类更加清晰和易于维护,特别是当配置属性非常复杂时。 ### 回答2: @nestedconfigurationproperty是一个注释标签,用于Spring Boot中的@ConfigurationProperties类中标记嵌套属性的内部类或嵌套属性。Spring Boot中的@ConfigurationProperties提供了一种方便的方式来绑定应用程序的属性到POJO类中,简化了配置属性的读取和应用。当我们需要对配置文件进行分组或分类时,可以在@ConfigurationProperties类中定义一个内部类或多个嵌套属性,使用@nestedconfigurationproperty来标记它们,以便更好地组织配置。 举个例子,假设我们正在开发一个应用程序,并在application.yml文件中配置了一系列属性,例如: ``` app: name: My Application debug: true database: host: localhost port: 3306 username: root password: password ``` 为了更好地组织属性,我们可以创建一个@ConfigurationProperties类,将上述属性绑定到POJO对象中,如下所示: ``` @Component @ConfigurationProperties(prefix = "app") public class AppConfig { private String name; private boolean debug; private DatabaseConfig database; // getters and setters // ... public static class DatabaseConfig { private String host; private int port; private String username; private String password; // getters and setters // ... } } ``` 上述代码定义了一个名为AppConfig的@ConfigurationProperties类,使用了prefix属性指定了属性前缀为"app",并定义了三个属性:name、debug和database。其中,database是一个嵌套属性,我们使用了@nestedconfigurationproperty注释标记了它。 在这个嵌套属性的定义中,我们定义了一个名为DatabaseConfig的内部类,该类包含了host、port、username和password四种属性,用于存储数据库连接信息。这样,我们就可以通过访问AppConfig对象的database属性来获取数据库连接信息,如下所示: ``` @Autowired private AppConfig appConfig; public void printDatabaseConfig() { DatabaseConfig database = appConfig.getDatabase(); System.out.println("数据库地址:" + database.getHost() + ":" + database.getPort()); System.out.println("用户名:" + database.getUsername()); System.out.println("密码:" + database.getPassword()); } ``` 总之,@nestedconfigurationproperty是一个有用的注释标签,可以帮助我们更好地组织和管理配置文件中的属性。 ### 回答3: @nestedconfigurationproperty是Spring Boot 2.2.0版本中新增的注释类型。它可以用于给一个@ConfigurationProperties注释的属性创建一个嵌套的子属性。也就是说,我们可以使用@nestedconfigurationproperty,为一个@ConfigurationProperties所对应的Java类中的某些属性创建一个嵌套的子属性。这个子属性可以是一个对象,也可以是一个集合或者数组。 使用@nestedconfigurationproperty非常简单。我们只需要在父属性所对应的Java类中,将需要创建嵌套子属性的属性标记为@nestedconfigurationproperty,然后写一个内部类作为这个属性的子属性即可。例如: @ConfigurationProperties(prefix = "my-config") public class MyConfigProperties { private String connectionString; private Pool pool; @NestedConfigurationProperty private Security security; ... } 这个定义中,我们使用了@SpringBootConfigurationProperties注释,用于标记MyConfigProperties是一个@ConfigurationProperties类。在该类中,我们定义了connectionString、pool和security这三个属性。其中,我们使用了@nestedconfigurationproperty来标记security属性,表示该属性需要创建一个嵌套的子属性。由于嵌套的子属性是一个对象,所以我们需要使用内部类Security来表示它。 使用@nestedconfigurationproperty的好处在于,它可以使得配置文件更加清晰易懂。通过将一些属性嵌套在一起,我们可以更加直观地看出它们之间的关系。此外,这种方法还可以使得我们更方便地编写代码,而不用担心属性的名称冲突问题。 需要注意的是,@nestedconfigurationproperty只要用于@ConfigurationProperties所对应的Java类中,而不是@ConfigurationProperties注释本身。因此,在使用此注释时,我们需要注意注释的位置以及需要嵌套的子属性的类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值