news 2026/6/23 17:00:51

@PropertySource@ImportResource@Bean

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
@PropertySource@ImportResource@Bean

一、核心定义与基础用法

1. @Value 注解

@Value是 Spring 中用于零散地、直接地注入单个配置值的注解,支持 SpEL 表达式(Spring 表达式语言),通常作用在字段、方法参数或构造器参数上。

java

运行

@Component public class ValueDemo { // 注入单个配置值 @Value("${app.name}") private String appName; // 支持默认值 @Value("${app.port:8080}") private Integer appPort; // 支持SpEL表达式 @Value("#{T(java.lang.Math).random() * 100}") private Double randomNum; }
2. @ConfigurationProperties 注解

@ConfigurationProperties是 Spring Boot 提供的注解,用于批量地、结构化地绑定一组相关的配置属性到一个 Java 类中,通常作用在类上,需要配合@Component(或@Configuration)使类被 Spring 管理。

java

运行

@Component // 绑定配置前缀为app的所有属性 @ConfigurationProperties(prefix = "app") public class ConfigPropertiesDemo { private String name; private Integer port; private List<String> allowedIps; // 支持复杂类型(集合、对象) // 必须提供getter/setter方法(核心!) public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } public List<String> getAllowedIps() { return allowedIps; } public void setAllowedIps(List<String> allowedIps) { this.allowedIps = allowedIps; } }

对应的application.yml配置:

yaml

app: name: demo-app port: 8081 allowed-ips: [127.0.0.1, 192.168.1.1]

二、核心对比(笔记核心)

对比维度@Value 注解@ConfigurationProperties 注解
绑定方式单个属性零散绑定批量结构化绑定(按前缀分组)
支持的数据类型基本类型、String、SpEL 表达式基本类型、String、集合、对象(嵌套)
是否需要 getter/setter不需要(直接注入字段)必须需要(通过 setter 绑定)
默认值支持支持(如${key:默认值}不直接支持(需在类中手动设置默认值)
SpEL 表达式支持支持不支持
配置校验不支持(无法用 @Validated 等校验)支持(配合 @Validated、@NotNull 等)
松散绑定不支持(必须严格匹配配置名,如 appName 不能写 app-name)支持(app-name 可绑定到 appName 字段)
IDE 提示无(IDE 无法识别配置键是否存在)有(Spring Boot 插件可提示配置键)
使用场景少量、零散的配置注入一组相关的配置(如数据源、第三方服务配置)

三、实战示例:配置校验(@ConfigurationProperties 独有)

java

运行

@Component @ConfigurationProperties(prefix = "app") @Validated // 开启校验 public class ValidConfigDemo { @NotNull(message = "应用名称不能为空") // 校验规则 private String name; @Min(value = 1024, message = "端口号不能小于1024") private Integer port; // getter/setter省略 }

当配置中app.name为空时,启动项目会直接抛出校验异常,提前发现配置错误,这是@Value做不到的。

四、使用建议

  1. 如果只是注入 1-2 个零散的配置(如单个端口、单个开关),用@Value更简洁;
  2. 如果是一组相关的配置(如数据库配置:url、username、password),优先用@ConfigurationProperties,可读性和可维护性更高;
  3. 对配置有校验需求、需要 IDE 提示、或配置包含集合 / 对象类型时,必须用@ConfigurationProperties
  4. 避免混合使用:同一组配置要么全用@Value,要么全用@ConfigurationProperties,保持风格统一。

总结

  1. @Value适合零散、简单、需 SpEL的配置注入,无需 getter/setter,但不支持校验和松散绑定;
  2. @ConfigurationProperties适合批量、结构化、需校验的配置注入,支持复杂类型和松散绑定,是 Spring Boot 中管理配置的最佳实践;
  3. 核心选择依据:配置的 “关联性” 和 “复杂度”—— 零散简单用@Value,成组复杂用@ConfigurationProperties
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 19:14:03

SpringBoot整合Thymeleaf

一、Thymeleaf 简介Thymeleaf 是一款现代化的服务器端 Java 模板引擎&#xff0c;主要用于 Web 开发中渲染 HTML 页面&#xff0c;能够无缝集成 Spring Boot 框架。它的核心优势是&#xff1a;支持 HTML 原生语法&#xff0c;模板文件可直接在浏览器中打开预览&#xff08;无后…

作者头像 李华
网站建设 2026/6/19 21:30:56

亲测好用!8个AI论文平台测评,研究生毕业论文必备

亲测好用&#xff01;8个AI论文平台测评&#xff0c;研究生毕业论文必备 2026年AI论文平台测评&#xff1a;从功能到体验的深度解析 随着人工智能技术在学术领域的广泛应用&#xff0c;越来越多的研究生开始依赖AI工具来提升论文写作效率。然而&#xff0c;面对市场上五花八门的…

作者头像 李华
网站建设 2026/6/19 21:30:23

循环经济在不同行业的应用前景比较

循环经济在不同行业的应用前景比较 关键词:循环经济、行业应用、应用前景、可持续发展、资源利用 摘要:本文旨在深入探讨循环经济在不同行业的应用前景并进行比较。首先介绍了循环经济的背景知识,包括其目的、适用读者、文档结构和相关术语。接着阐述了循环经济的核心概念、…

作者头像 李华
网站建设 2026/6/19 22:42:27

STM32F0实战:基于HAL库开发【2.1】

7.4.2 从待机模式唤醒 待机模式允许达到能耗最低,它基于Cortex-M0深度睡眠模式,电压调节器禁用,1.8V域关闭,PLL、HIS和HSE振荡器也关闭,SRAM和寄存器内容丢失。只有RTC寄存器、RTC备份寄存器和备用电路保持工作。可以使用HAL库中的HAL_PWR_EnterSTANDBYMode()函数进入待机…

作者头像 李华
网站建设 2026/6/19 1:27:00

动态系统思维:告别僵化内耗的破局指南

职场中总有这样的困惑&#xff1a;公司制定了标准化流程&#xff0c;却越执行越低效&#xff1b;团队追求“绝对有序”&#xff0c;反而失去创新活力&#xff1b;个人埋头重复固有工作&#xff0c;却在变化中逐渐被淘汰。我们总以为“稳定有序”是生存之道&#xff0c;却忽略了…

作者头像 李华
网站建设 2026/6/19 22:45:31

什么病毒会导致人全身没力气、胃口不好,还有拉肚子?

多种病毒感染都可能引发全身乏力、食欲不振、腹泻的症状,其中最常见的是诺如病毒和轮状病毒,此外新冠病毒、腺病毒等也可能出现这类表现。 🦠 常见相关病毒及特点 1. 诺如病毒 • 典型症状:突发腹泻、呕吐,伴随全身乏力、食欲减退,还可能有腹痛、低热 • 传播性强:可…

作者头像 李华