当前位置: 首页 > news >正文

@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
http://www.cnnetsun.cn/news/801693.html

相关文章:

  • 数据结构学习笔记
  • 学校教室多功能布局平面图在线设计的实用技巧和方法
  • 智能交通管理:实时路况优化与拥堵预测
  • 【Python自动化】不懂代码怎么批量修图?这款 AI 工具把“脚本思维”封装成了傻瓜式软件!
  • 大模型面试真题解析+学习路线图,附200本PDF书籍和100套商业方案_AGI大模型面经汇总,太全了!
  • 【2026最新】大模型面试全攻略:23家科技公司面试经验+高频考点总结,助你轻松上岸
  • 提示设计用户协作全流程检查清单(架构师版)
  • 指针,C语言的灵魂与噩梦:从入门到“放弃”的终极指南 [特殊字符]
  • YOLO26改进 - 采样 | 小目标分割救星:HWD 降采样少丢细节提精度
  • 数字化种植牙企业
  • 【品牌速成】想做 Private Label 没图怎么办?解析 AI 图像技术如何实现产品图片的“虚拟贴牌”
  • 基于Java的工程车辆成本核算智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 【课程设计/毕业设计】基于springboot的社区志愿者服务系统springboot社区助老志愿管理服务平台的开发【附源码、数据库、万字文档】
  • SpringBoot 2.0 + Nacos + Sentinel 流控规则集中存储至nacos完整配置步骤
  • 计算机Java毕设实战-基于springboot的社区志愿者服务系统基于Spring Boot的社区助老志愿管理服务平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 一文吃透网络传输七层协议:从原理到实际应用
  • Java毕设项目:基于springboot的社区志愿者服务系统(源码+文档,讲解、调试运行,定制等)
  • 【程序员必藏】深入理解Qwen视觉语言模型:架构创新与关键技术解析
  • 小白也能学会!vLLM本地部署大模型完整教程
  • 大模型微调经验分享:数据预处理、模型结构、训练参数与错误处理_AI大模型面经轻松应对面试!
  • 曾经的王,突然 MySQL 倒下了!!!
  • MATLAB数据分析,基于遗传算法,粒子群优化算法优化BP神经网络GA-BP和PSO-BP的数...
  • Java毕设项目:基于springboot的三体科幻社区管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 31岁仍被说幼稚:上班最狠的PUA是让我们盼着自己变老
  • 生物医学研究新利器:自我进化LLM智能体架构与实战
  • 【2026全网首发】AI智能体完全指南:面试必备+大模型开发实战+学习资源全解析
  • 基于STM32的老年智能手环系统设计
  • 基于STM32的蓝牙智能控制风扇
  • kotlin
  • 4.2.多线程JUC-并发和并行