首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 加載 Properties 配置文件雙模式詳解:XML 佔位符與 @Value 注解注入

     編輯:Java 相關知識

專案中頻繁變更的參數(數據庫連接、文件路徑、第三方密鑰)應外部化至 Properties 文件。Spring 提供兩種加載機制:基於 XML 的佔位符替換、基於註解的 @Value 注入,本文對比兩種模式適用場景與配置細節。

一、 模式一:XML 佔位符替換(<context:property-placeholder>)

1. 配置文件 conn.properties

dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc\:mysql\://localhost\:3306/shop
user=root
password=root

2. beans.xml 配置

<context:property-placeholder location="classpath:conn.properties"/>

<bean id="dataSource" class="${dataSource}">
    <property name="driverClass" value="${driverClass}"/>
    <property name="jdbcUrl" value="${jdbcUrl}"/>
    <property name="user" value="${user}"/>
    <property name="password" value="${password}"/>
</bean>

啟動時 Spring 解析 ${key} 替換為 Properties 值,適用於 Bean 定義階段的屬性注入。

3. 等價 <bean> 寫法(可讀性更強)

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <array><value>classpath:conn.properties</value></array>
    </property>
</bean>

PropertyPlaceholderConfigurer 支持多文件數組,優先級按順序遞減。

二、 模式二:註解注入(@Value + PropertiesFactoryBean)

1. 配置文件 public.properties

filePath=E\:\\web\\apache-tomcat-8.0.26\\webapps\\E_shop\\image

2. beans.xml 註冊 PropertiesFactoryBean

<bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <array><value>classpath:public.properties</value></array>
    </property>
</bean>

3. Java 代碼中注入

@Component("fileUpload")
public class FileUploadUtil implements FileUpload {
    private String filePath;

    @Value("#{prop.filePath}")
    public void setFilePath(String filePath) {
        System.out.println(filePath); // 啟動日誌驗證注入成功
        this.filePath = filePath;
    }
}

關鍵點:

  • @Value("#{prop.filePath}"):SpEL 表達式,引用 Bean prop 的屬性 filePath
  • 必須寫在 Setter 方法上,字段注入需 @Autowired 配合
  • 控制台輸出路徑證明 Spring 啟動階段已完成注入

三、 兩種模式對比與選型建議

維度XML 佔位符@Value 註解
適用範圍Bean 定義元數據(class、property)Java 代碼邏輯(字段、方法參數)
多文件支持locations 數組多個 PropertiesFactoryBean 或合併文件
類型轉換自動轉換基本類型同樣支持,SpEL 表達式更強
可讀性集中聲明,適合基礎設施配置分散在業務代碼,適合業務參數
熱加載不支持不支持(需 Spring Cloud Config/Apollo)

四、 核心原理統一

PropertyPlaceholderConfigurer 與 PropertiesFactoryBean 均繼承 PropertiesLoaderSupport,底層均通過 PropertiesLoaderUtils.loadProperties() 讀取資源文件。本質相同,只是注入切入點不同。

五、 實戰建議

  • 基礎設施配置:XML 佔位符(數據源、事務管理器、緩存管理器)
  • 業務參數配置:@Value 注入(文件路徑、第三方密鑰、分頁大小、開關標誌)
  • 敏感信息:不要寫入 Properties 文件,使用環境變量或配置中心
  • 編碼統一:Properties 文件保存為 UTF-8,避免中文亂碼

掌握雙模式,讓配置管理既規範又靈活。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved