Spring Boot 中的 @EnableConfigurationProperties 注解

news2024/11/19 17:34:39

Spring Boot 中的 @EnableConfigurationProperties 注解

在 Spring Boot 中,@EnableConfigurationProperties 注解是一个非常有用的注解,它可以用于启用对特定配置类的支持。在本文中,我们将深入探讨 @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 中不可或缺的一部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ST CubeMX 实现6对PWM同步输出/互补输出/三相PWM输出

频率为1KHz的6对PWM波形 原理:定时器1为主模式,定时器8为从模式,TIM1的定时器使能操作作为触发输出[TRGO]触发TIM8并使能TIM8的计数器,同时输出两路频率、占空比以及脉冲数量(小于256个,高级定时器重复计数功能为8位)可调PWM波形。 Tim1 参数配置 Tim8参数配置 未同步输出…

CC2530 GPIO口输出配置说明

第一章 原理图分析 CC2530核心板上带有两颗晶振:第一颗频率为32MHZ,第二颗频率为32.768KHZ CC250正常运行的时候,需要一个高频的时钟信号和一个低频的时钟信号。 高频时钟信号,主要供给CPU,保证程序的运行。 低频时钟信号,主要供给看门狗、睡眠定时器等片上外设。 按…

【强化学习】常用算法之一 “TRPO”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

StorageGRID——开放式的 S3 对象存储,可大规模管理非结构化数据

StorageGRID——开放式的 S3 对象存储&#xff0c;可大规模管理您的非结构化数据 专为混合多云体验打造的对象存储 StorageGRID 通过简化的平台为对象数据提供更强大的数据管理智能。由于 StorageGRID 利用 S3&#xff0c;因此可以轻松地连接混合云工作流&#xff0c;提供流畅…

C++ - 20230628

一. 思维导图 二. 练习 1) 总结类和结构体的区别 本身的访问级别不同struct是值类型&#xff0c;class是引用类型struct在栈&#xff0c;适合处理小型数据。class在堆区&#xff0c;适合处理大型逻辑和数据。 2) 定义一个矩形类&#xff08;Rectangle&#xff09;&#xff…

基于Java+SpringBoot+vue的高校学生党员发展管理系统设计与实现

博主介绍&#xff1a;✌擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案…

我是怎么把win11一步一步变成Mac的

目录 【三指拖动】 【空格预览】 【切换Ctrl和Alt】 【使用Linux命令】 【其它】 之前很长一段时间在MacBook上面开发习惯了&#xff0c;然后因为一些原因现在换到了windows上面&#xff0c;不管是使用上还是系统上都很不习惯&#xff0c;因此做了一些改造&#xff0c;…

LTD232次升级 | 社区新增PC版首页 • 名片新增卡片样式、可展示传真 • 导航数据可官微中心管理 • 个人中心可定制

1、社区支持PC版首页 2、名片小程序新增一种全局卡片样式、支持显示传真 3、官微中心新增导航管理 4、手机版商城个人中心支持版块配置 5、新增一组新闻轮播模块 01 用户社区应用 1) 新增PC版社区首页 在本次升级中&#xff0c;我们为用户社区应用新增了PC版的首页。 开…

【探索 Kubernetes|作业管理篇 系列 15】DaemonSet 的”过人之处“

前言 大家好&#xff0c;我是秋意零。 在上一篇中&#xff0c;我们讲解了 StatefulSet 的存储状态&#xff1b;我们发现&#xff0c;它的存储状态&#xff0c;就是利用了 PV 与 PVC 的设计。StatefulSet 自动为我们创建 PVC 并且以 <pvc-name>-<pod-name>-<编…

selenium模拟!看这篇就够了

介绍 Selenium是一个用于自动化Web浏览器测试的开源工具&#xff0c;它支持多种Web浏览器&#xff08;如Google Chrome、Firefox、Safari等&#xff09;和操作系统&#xff08;如Windows、Mac和Linux&#xff09;。Selenium可以模拟用户在Web浏览器中的行为&#xff0c;例如点…

ssm汉语言学习应用系统APP -计算机毕设 附源码80400

ssm汉语言学习应用系统APP 摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。每天都有大量的农产品需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于Android模式的汉语言学习应用系统。 对于本汉语言学习应用系统的设计来说&#x…

十、云尚办公系统-员工端审批

云尚办公系统&#xff1a;员工端审批 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步&#xff01;&#xff01;&…

回收站删除的文件怎么恢复?4招快速搞定!

求救求救&#xff01;我刚刚一个不小心就把回收站清空了&#xff01;但是我回收站里还有需要恢复的文件&#xff0c;这次一不小心清空了回收站&#xff0c;我的重要文件还有机会找回来吗&#xff1f;希望大家帮帮我! 对于部分朋友来说&#xff0c;回收站可能不仅仅是一个垃圾文…

Selenium 不开启浏览器页面执行测试用例

实际工作中会遇到不开启浏览器页面来执行测试用例的情况&#xff0c;可以通过ChromeOptions来实现 ChromeOptions是chromedriver支持的浏览器启动选项 Google 针对 Chrome 浏览器 59版 新增加的Chrome-headless 模式&#xff0c;可以在不打开UI界面的情况下使用 Chrome 浏览器…

【Java高级编程】多线程

多线程 1、基本概念&#xff1a;程序、进程、线程1.1、程序1.2、进程1.3、线程1.4、单核CPU和多核CPU的理解1.5、并行与并发1.6、使用多线程的优点1.7、何时需要多线程 2、线程的创建和使用2.1、创建多线程的方式一&#xff1a;继承Thread类2.2、Thread类的有关方法2.3、线程的…

选择高考志愿:聚焦计算机科学与技术,规避土木工程

选择高考志愿&#xff1a;聚焦计算机科学与技术&#xff0c;规避土木工程 高考季已至&#xff0c;各地高考成绩陆续公布&#xff0c;许多毕业生和家长开始面临疑惑&#xff1a;如何填报志愿、选专业还是选学校、什么专业好就业&#xff1f;张雪峰曾提到&#xff1a;“普通家庭…

机房动环是什么?内附最新机房动环监控系统报价

伴随着计算机信息化的发展和物联网的广泛运营&#xff0c;为了减少人员维护成本&#xff0c;实现智能化监控管理&#xff0c;机房动环监控系统逐渐被应用开来。通过一套完整的机房动环监控系统&#xff0c;一个偌大的机房就可以实现24小时无人值守。机房动环是什么&#xff1f;…

【Redis】介绍及安装

&#x1f3af;简介 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值对&#xff08;key-value&#xff09;存储数据库&#xff0c;它支持多种数据类型&#xff0c;如字符串、列表、集合、哈希表和有序集合等。 Redis通常用于缓存、消息队列、实时…

移动设备管理 (MDM)工具

移动设备管理 &#xff08;MDM&#xff09;可帮助管理员通过无线方式管理和保护组织的移动设备群&#xff0c;而不会影响最终用户体验。现代 MDM 解决方案还可以控制应用程序、内容和安全性&#xff0c;因此员工可以无后顾之忧地在托管设备上工作。移动设备管理软件可有效管理个…

华为HUAWEI MateBook D 2018 黑苹果Monterey 12.6.5的安装过程

HUAWEI MateBook D 2018 黑苹果系统的安装 HUAWEI MateBook D 2018版,配置列表如下&#xff1a;安装Monterey 12.6.5流程1. 打开balenaEtcher&#xff0c;选择好系统镜像和U盘&#xff0c;将镜像刻录到U盘中&#xff0c;点击Flash等待刻录完成&#xff1b;2. 使用DiskGenius将下…