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

Spring @Value 注解注入屬性的五種常見方式全解析

     編輯:Java 相關知識

Spring 框架提供了多種途徑將外部配置屬性注入到 Bean 中,@Value 注解配合不同的配置源實現方式,可滿足從簡單到複雜的各類場景。本文系統梳理五種主流實現路徑,附帶完整 XML 與 Java 代碼示例,幫助開發者根據項目需求選擇最優方案。

場景設定

假設存在屬性文件 dev.properties,內容如下:

tag=123

目標:將 tag 值注入到 Bean 字段 private String tag; 中。

方式一:PropertyPlaceholderConfigurer + ${...} (經典模式)

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="dev.properties" />
</bean>
@Value("${tag}")
private String tag;

特點:Spring 早期核心方案,解析 XML 中所有 ${...} 佔位符,適用於傳統 XML 驅動項目。

方式二:PreferencesPlaceholderConfigurer + ${...}

<bean id="appConfig" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
    <property name="location" value="dev.properties" />
</bean>
@Value("${tag}")
private String tag;

特點:功能類似 PropertyPlaceholderConfigurer,但基於 Java Preferences API,適合需系統級配置隔離的場景。

方式三:PropertiesFactoryBean + SpEL #{...}

<bean id="config" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value="dev.properties" />
</bean>
@Value("#{config['tag']}")
private String tag;

特點:將屬性文件暴露為 Properties Bean,通過 SpEL 索引取值,支持運行時動態計算與 Bean 間引用。

方式四:util:properties 命名空間 + SpEL #{...} (簡化配置)

Spring 提供 util 命名空間簡化 PropertiesFactoryBean 定義:

<util:properties id="config" location="dev.properties"/>
@Value("#{config['tag']}")
private String tag;

效果 與方式三完全等價,配置更簡潔,推薦使用。

方式五:內聯 Properties 定義 (無外部文件)

直接在 XML 中定義屬性,適用於少量、固定、不想單獨維護文件的配置:

<bean id="appConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="properties">
        <props>
            <prop key="tag">123</prop>
        </props>
    </property>
</bean>
@Value("${tag}")
private String tag;

綜合對比與選型指南

方式配置複雜度外部文件表達式推薦場景
PropertyPlaceholderConfigurer低是${...}傳統 XML 項目,統一管理多文件
PreferencesPlaceholderConfigurer低是${...}需系統級偏好設置隔離
PropertiesFactoryBean中是#{...}需 SpEL 動態計算、引用其他 Bean
util:properties低是#{...}現代 Spring XML 簡化配置首選
內聯 props極低否${...}極少量固定配置、測試環境

現代最佳實踐 (Spring Boot / Spring 3.1+)

在新項目中,強烈建議棄用上述 XML 配置,改用:

  1. @PropertySource("classpath:dev.properties") + @Value("${tag}")
  2. @ConfigurationProperties(prefix="tag") 綁定到 POJO,獲得類型安全、鬆散綁定、JSR-303 校驗等能力。
  3. Spring Boot 專案直接在 application.yml 定義,零配置自動綁定。

理解這五種底層機制,有助於維護舊系統、排查注入失效問題,並在受限環境下做出正確技術選型。

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