SpringBoot中的@EnableConfigurationProperties注解原理及用法

 更新时间:2023年06月30日 09:45:42   作者:程序媛-徐师姐  
在SpringBoot中,@EnableConfigurationProperties注解是一个非常有用的注解,它可以用于启用对特定配置类的支持,在本文中,我们将深入探讨@EnableConfigurationProperties注解,包括它的原理和如何使用,需要的朋友可以参考下

SpringBoot 中的 @EnableConfigurationProperties 注解

@EnableConfigurationProperties 注解的原理

在 Spring Boot 中,@EnableConfigurationProperties 注解用于启用对特定配置类的支持。它会将指定的配置类加载到 Spring 容器中,并将其注入到带有 @Autowired 注解的类中。这样,我们就可以方便地使用配置类中定义的属性。

@EnableConfigurationProperties 注解本身并不会创建配置类的实例。相反,它会触发 Spring Boot 自动配置的机制,该机制会在应用程序启动时自动创建配置类的实例,并将其注入到带有 @Autowired 注解的类中。

如何使用 @EnableConfigurationProperties 注解

在 Spring Boot 中,我们可以通过使用 @EnableConfigurationProperties 注解来启用对特定配置类的支持。下面是一个示例:

@Configuration
@EnableConfigurationProperties(MyProperties.class)
public class MyConfig {
    @Autowired
    private MyProperties properties;
    @Bean
    public MyBean myBean() {
        return new MyBean(properties.getMyProperty());
    }
}

在上面的代码中,我们首先使用 @EnableConfigurationProperties 注解来启用对 MyProperties 配置类的支持。然后,在 MyConfig 类中,我们使用 @Autowired 注解将 MyProperties 注入到 properties 变量中。最后,在 myBean() 方法中,我们使用 properties.getMyProperty() 方法来获取 MyProperties 配置类中定义的 my.property 属性的值,并将其传递给 MyBean 的构造函数。

除了基本的用法之外,@EnableConfigurationProperties 注解还提供了一些其他的配置选项,例如 prefix 和 ignoreInvalidFields 等。下面是一个示例:

@Configuration
@EnableConfigurationProperties(MyProperties.class)
@ConfigurationProperties(prefix = "my.config", ignoreInvalidFields = true)
public class MyConfig {
    @Autowired
    private MyProperties properties;
    @Bean
    public MyBean myBean() {
        return new MyBean(properties.getMyProperty());
    }
}

在上面的代码中,我们使用 @ConfigurationProperties 注解来指定配置类的前缀和是否忽略无效的属性。这些配置选项可以帮助我们更好地管理应用程序的配置,并提高代码的可维护性和可扩展性。

@EnableConfigurationProperties 注解的高级用法

除了基本的用法之外,@EnableConfigurationProperties 注解还提供了一些高级用法,例如使用 FactoryBean 来创建配置类的实例。

使用 FactoryBean 创建配置类的实例

在某些情况下,我们可能需要使用 FactoryBean 来创建配置类的实例。例如,我们可能需要从数据库中加载配置数据,并将其填充到配置类中。下面是一个示例:

public class MyPropertiesFactoryBean implements FactoryBean<MyProperties> {
    @Override
    public MyProperties getObject() throws Exception {
        // 从数据库中加载配置数据,并将其填充到 MyProperties 实例中
        MyProperties properties = new MyProperties();
        properties.setMyProperty("foo");
        return properties;
    }
    @Override
    public Class<?> getObjectType() {
        return MyProperties.class;
    }
    @Override
    public boolean isSingleton() {
        return true;
    }
}
@Configuration
@EnableConfigurationProperties(MyProperties.class)
public class MyConfig {
    @Autowired
    private MyProperties properties;
    @Bean
    public MyBean myBean() {
        return new MyBean(properties.getMyProperty());
    }
    @Bean
    public FactoryBean<MyProperties> myProperties() {
        return new MyPropertiesFactoryBean();
    }
}

在上面的代码中,我们首先创建了一个名为 MyPropertiesFactoryBean 的类,它实现了 FactoryBean 接口,并用于创建 MyProperties 配置类的实例。然后,在 MyConfig 类中,我们使用 @Bean 注解来将 MyPropertiesFactoryBean 注入到 Spring 容器中。最后,在 myBean() 方法中,我们使用 properties.getMyProperty() 方法来获取 MyProperties 配置类中定义的 my.property 属性的值,并将其传递给 MyBean 的构造函数。

使用 @Conditional 注解控制配置类的加载

在某些情况下,我们可能希望仅在特定条件下加载配置类。例如,我们可能希望仅在指定的环境中加载配置类,或者仅在特定的配置文件中加载配置类。在这种情况下,我们可以使用 @Conditional 注解来控制配置类的加载。下面是一个示例:

@Configuration
@ConditionalOnProperty(name = "my.config.enabled", havingValue = "true")
@EnableConfigurationProperties(MyProperties.class)
public class MyConfig {
    @Autowired
    private MyProperties properties;
    @Bean
    public MyBean myBean() {
        return new MyBean(properties.getMyProperty());
    }
}

在上面的代码中,我们使用 @ConditionalOnProperty 注解来指定条件,即仅在名为 “my.config.enabled” 的属性的值为 “true” 时才加载配置类。这使得我们可以轻松地控制配置类的加载,并在需要时提高代码的可维护性和可扩展性。

总结

在本文中,我们深入探讨了 Spring Boot 中的 @EnableConfigurationProperties 注解,包括它的原理和如何使用。我们了解到,@EnableConfigurationProperties 注解可以帮助我们更好地管理应用程序的配置,并提高代码的可维护性和可扩展性。无论是基本的用法还是高级用法,@EnableConfigurationProperties 注解都是 Spring Boot 中不可或缺的一部分。

到此这篇关于SpringBoot中的@EnableConfigurationProperties注解原理及用法的文章就介绍到这了,更多相关SpringBoot @EnableConfigurationProperties内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot 项目瘦身maven/gradle详解

    SpringBoot 项目瘦身maven/gradle详解

    这篇文章主要介绍了SpringBoot项目瘦身(maven/gradle),本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Intellij Idea修改代码方法参数自动提示快捷键的操作

    Intellij Idea修改代码方法参数自动提示快捷键的操作

    这篇文章主要介绍了Intellij Idea修改代码方法参数自动提示快捷键的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • idea如何生成springboot单元测试用例

    idea如何生成springboot单元测试用例

    这篇文章主要介绍了idea生成springboot单元测试用例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • java方法重写时需要注意的问题

    java方法重写时需要注意的问题

    大家好,本篇文章主要讲的是java方法重写时需要注意的问题,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • spring+shiro 整合实例代码详解

    spring+shiro 整合实例代码详解

    本文通过实例代码给大家介绍spring+shiro 整合的过程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • spring-boot-starter-parent的作用详解

    spring-boot-starter-parent的作用详解

    这篇文章主要介绍了spring-boot-starter-parent的作用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 关于Java应用日志与Jaeger的trace关联的问题

    关于Java应用日志与Jaeger的trace关联的问题

    这篇文章主要介绍了Java应用日志如何与Jaeger的trace关联,通过jaeger发现这十次请求中有一次耗时特别长,想定位一下具体原因,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • Jackson自定义序列化与反序列化注解详解

    Jackson自定义序列化与反序列化注解详解

    这篇文章主要介绍了Jackson自定义序列化与反序列化注解详解,某些场景下,我们使用Jackson对数据进行序列化或反序列化的时候,需要对某些数据进行特殊处理,需要的朋友可以参考下
    2023-11-11
  • java中ssh2执行多条命令的四种方法

    java中ssh2执行多条命令的四种方法

    本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感兴趣的可以了解一下
    2025-09-09
  • 关于Java中配置ElasticSearch集群环境账号密码的问题

    关于Java中配置ElasticSearch集群环境账号密码的问题

    这篇文章主要介绍了Java中配置ElasticSearch集群环境账号密码的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论