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

org.springframework.core.env.PropertiesPropertySource 类详解

org.springframework.core.env.PropertiesPropertySource 类详解

在这里插入图片描述


1. 基本概述
  • 类路径: org.springframework.core.env.PropertiesPropertySource
  • 继承关系: 继承自 PropertySource<Properties>,实现 PropertySource 接口。
  • 作用: 将 Java Properties 对象(如 application.properties 文件内容)封装为 Spring 环境(Environment)中的属性源,支持通过键名获取属性值。

2. 核心功能
  • Properties 文件加载: 将 Properties 对象(如从文件、资源或内存中加载的键值对)作为配置属性源。
  • 属性访问: 支持通过 getProperty() 方法直接读取属性值。
  • 嵌套属性支持: Spring 的 PropertyResolver 会自动解析嵌套键(如 user.name)。

3. 关键方法
  • 构造方法:

    public PropertiesPropertySource(String name, Properties source)
    
    • name: 属性源的唯一名称(如 "application-properties")。
    • source: 包含配置键值对的 Properties 对象。
  • 常用方法:

    • containsProperty(String name): 检查是否存在指定键的属性。
    • getProperty(String name): 根据键名获取属性值(返回 Object 类型,通常为 String)。

4. 典型应用场景
  • 加载传统 Properties 文件: 如 application.properties 或自定义配置文件。
  • 自定义配置加载: 在启动时或运行时动态加载 Properties 文件。
  • 与 Spring Boot 集成: Spring Boot 默认会自动加载 application.properties 并注册为 PropertiesPropertySource

5. 使用示例
// 1. 加载 Properties 文件
Properties props = new Properties();
props.load(new FileInputStream("config.properties")); // 例如文件内容:app.version=1.0.0// 2. 创建 PropertiesPropertySource
PropertiesPropertySource propsSource = new PropertiesPropertySource("customConfig", props);// 3. 将属性源添加到 Environment
ConfigurableEnvironment environment = ... ; // 从 Spring 上下文获取
environment.getPropertySources().addFirst(propsSource); // 优先级最高// 4. 读取属性
String version = environment.getProperty("app.version"); // 输出 "1.0.0"

6. 注意事项
  • 编码问题:

    • Properties 文件默认使用 ISO-8859-1 编码,若包含中文需显式指定 UTF-8:
      props.load(new InputStreamReader(new FileInputStream("config.properties"), "UTF-8"));
      
  • 类型转换:

    • 默认返回 String 类型,需通过 EnvironmentgetProperty(name, Class<T>) 进行类型转换。
  • 属性覆盖:

    • 通过 addFirst()addLast() 控制优先级(先添加的属性源可能被后添加的覆盖)。

7. 与 MapPropertySource/SimpleCommandLinePropertySource 的区别
特性PropertiesPropertySourceMapPropertySourceSimpleCommandLinePropertySource
数据来源Properties 对象(如文件加载)内存中的 Map 对象命令行参数(如 --key=value
动态修改不支持(除非重新加载 Properties)取决于底层 Map 是否可变支持(通过 addProperty() 等方法)
默认解析规则支持 Properties 格式(如 key=value直接使用 Map 的键值对自动解析命令行参数格式
典型用途加载传统 Properties 文件单元测试或内存配置应用启动时读取命令行参数

8. 常见问题
  • Q: 如何加载多个 Properties 文件?
    • A: 可多次创建 PropertiesPropertySource 实例并添加到 Environment,或通过 @PropertySource 注解指定多个文件路径。
  • Q: 属性键名区分大小写吗?
    • A: 默认不区分大小写,可通过 PropertiessetIgnoreCase(true) 修改。
  • Q: 如何处理 Properties 文件中的特殊字符(如 #)?
    • A: 使用转义符(如 \\#),或确保键名不包含 Properties 文件的元字符(如 # 表示注释)。

9. 与 Spring Boot 的集成
  • 自动配置: Spring Boot 默认会自动加载 application.properties 并注册为 PropertiesPropertySource
  • 自定义配置: 通过 @PropertySource 注解在配置类中指定额外的 Properties 文件:
    @Configuration
    @PropertySource("classpath:custom-config.properties")
    public class AppConfig { ... }
    

相关文章:

  • LISN的使用
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(9): 意向形
  • 强化学习算法笔记【AMP】
  • 进程(Process)详解
  • c++ 互斥锁
  • c++学习流程
  • Python高级爬虫之JS逆向+安卓逆向1.6节: 函数基础
  • 动态规划(一)【背包】
  • 达梦统计信息收集情况检查
  • 便捷的中文转拼音实用工具
  • 关于Agent的简单构建和分享
  • 商汤绝影生成式AI汽车新品亮相上海车展,引领AI汽车创新潮流
  • Java-File类详解(一篇讲透)
  • devops自动化容器化部署
  • 海康NVR配置NAS-TrueNAS
  • NFC 碰一碰实现视频源码,网页与小程序协同
  • TFTP服务调试
  • uv run 都做了什么?
  • 7-1 三种语言的单词转换
  • 【ESP32-IDF笔记】07-ADC 配置和使用
  • 68岁民营科技企业家、中国环保产业协会原副会长宋七棣逝世
  • 天问三号开放20千克质量资源,邀国际合作开展火星探测研究
  • 乌代表团与美特使在伦敦举行会谈,双方同意继续对话
  • 我国将组织实施梦舟飞船零高度逃逸、揽月着陆器综合着陆起飞验证等试验
  • 王励勤当选中国乒乓球协会新一任主席
  • 外汇局:4月以来外汇市场交易保持平稳,跨境资金延续净流入