news 2026/8/10 1:23: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/7/30 18:50:03

Java中strip与trim()的区别

TOC Java中strip与trim()的区别 jdk11及以上版本&#xff0c;java的String支持strip()方法&#xff0c;那么原来的删除空白trim()与strip()的区别时什么&#xff1f; 区别 trim()&#xff1a;仅处理字符串首尾的ASCII空白字符串&#xff08;小于等于\u0020字符&#xff0c;…

作者头像 李华
网站建设 2026/7/31 14:17:01

软件测试—即时通讯测试方法

一、即时通讯实现方式 1.短轮询&#xff08;Short Polling&#xff09; 短轮询是一种客户端定期向服务器发送HTTP请求以检查是否有新数据的简单技术。无论服务器是否有新数据&#xff0c;客户端都会在固定的时间间隔后再次请求。 实现机制 客户端向服务器发送HTTP请求&#xff…

作者头像 李华
网站建设 2026/8/9 7:42:33

免费在线制作家庭小户型平面图的详细教程和设计模板大全

良功绘图网站 (https://www.lghuitu.com ) 一、引言&#xff1a;小户型平面图设计的核心价值与工具选择逻辑 在房价高企的当下&#xff0c;小户型住宅成为众多家庭的首选。如何在有限的空间内实现功能与美观的平衡&#xff0c;平面图设计是关键第一步。一份精准的小户型平面图…

作者头像 李华
网站建设 2026/8/6 22:05:01

小型工厂工艺流程图制作_在线设计装配/焊接/冲压工艺流程模板

良功绘图网站 (https://www.lghuitu.com ) 在小型工厂的日常运营中&#xff0c;工艺流程图是连接生产环节、规范操作标准、提升效率的核心工具。无论是装配、焊接还是冲压等核心生产流程&#xff0c;一份清晰、准确的工艺流程图能帮助工厂梳理工序逻辑、减少操作失误、降低沟通…

作者头像 李华
网站建设 2026/7/30 8:40:05

大语言模型训练原理解析:ChatGPT背后的技术原理与应用价值

大语言模型训练分为三步&#xff1a;预训练阶段通过互联网数据训练基础预测模型&#xff1b;监督微调阶段通过问答数据让模型学会回答问题&#xff1b;强化学习阶段让模型自行探索最佳解法&#xff0c;产生思维链。大模型本质是统计学预测器&#xff0c;通过预测下一个token生成…

作者头像 李华
网站建设 2026/8/2 13:35:40

【实时无功-有功控制器的动态性能】【带有电流控制的两级电压源变流器(VSC)】采用αβ阿尔法-贝塔转换进行电流反馈的实时无功功率控制器附Simulink仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真…

作者头像 李华