news 2026/6/15 19:49:17

@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/15 19:23:12

数据结构01——时间复杂度和空间复杂度

一.什么是数据结构数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据集合。不存在一种通用的数据结构针对于所有应用场景&#xff0c;所以产生了多种多样的数据结构来适配不同的环境&#xff1a;例如顺序表、链表、堆栈…

作者头像 李华
网站建设 2026/6/15 14:22:21

彼得林奇的“反向投资“成功案例

彼得林奇的“反向投资”成功案例 关键词&#xff1a;彼得林奇、反向投资、成功案例、投资策略、股票分析 摘要&#xff1a;本文聚焦于彼得林奇的“反向投资”策略及其成功案例。首先介绍了彼得林奇及其反向投资策略的背景&#xff0c;阐述了相关核心概念和联系。接着详细讲解了…

作者头像 李华
网站建设 2026/6/15 18:52:16

企业AI开发与技术实践白皮书2025|附36页PDF文件下载

白皮书探讨了在GenAI时代&#xff0c;企业如何利用大模型技术实现智能化转型。白皮书指出&#xff0c;大模型能力的不断提升为企业带来了无限想象力&#xff0c;但也面临着战略规划、数据治理、算力资源、场景适配等方面的挑战。企业需要构建覆盖顶层设计、技术选型、数据治理、…

作者头像 李华
网站建设 2026/6/15 9:16:48

【Java 新手必看】比较运算符:从概念到实战,附可运行代码案例

比较运算符是 Java 中用于判断 “两个值 / 变量关系” 的核心运算符&#xff0c;也是实现程序逻辑判断&#xff08;如 if/else&#xff09;的基础。新手常混淆 “等于” 和 “赋值”、“等于” 和 “对象相等”&#xff0c;这篇笔记结合可直接运行的代码案例&#xff0c;从基础…

作者头像 李华