当前位置: 首页 > 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.jsqmd.com/news/299605/

相关文章:

  • SpringBoot中多配置文件和外部配置文件加载顺序
  • Spring Boot 配置文件核心用法与加载优先级
  • Week 34: 量子深度学习入门:从 Neural ODE 到哈密顿量子演化
  • 什么是“同余数问题(千年数学难题)”?
  • Vue3+Node.js实现文件上传并发控制与安全防线 进阶篇
  • 大厂迷思:为什么顶级工程师会产出难以维护的代码
  • menset的使用方法
  • 数据结构学习笔记
  • “AUTOSAR?我连CAN都看不懂…” 一个汽车电子工程师的坦白与指南
  • SpringBoot整合Thymeleaf
  • 大数据领域数据中台的安全审计与合规
  • 数据结构01——时间复杂度和空间复杂度
  • Java中strip与trim()的区别
  • Python入门——字符串
  • 多级缓存必要性
  • OpenHarmony Flutter 分布式安全防护:跨设备身份认证与数据加密传输方案 - 指南
  • tp3.2性能暂时优化调整
  • 百万数据报表操作 - 努力-
  • 电商系统-下单功能 - 努力-
  • 软件测试—即时通讯测试方法
  • 告别if-else噩梦:流程编排技术
  • attn_scores注意力分计算-记录
  • 多头注意力中的张量重塑
  • 第二周作业wp
  • 吐血推荐专科生必用TOP9AI论文网站
  • Python 调用大模型(LLM) - 努力-
  • Python核心语法-Python自定义模块、Python包 - 努力-
  • 亲测好用9个一键生成论文工具,助本科生轻松写论文!
  • 为什么您的机房必须选择本地化 U 位资产管理系统?供应商服务深度解析
  • 人群仿真软件:Vadere_(3).用户界面操作