最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java枚舉如何使用spring的@value注入屬性

 更新時(shí)間:2023年09月21日 10:29:14   作者:Mint6  
這篇文章主要介紹了java枚舉如何使用spring的@value注入屬性問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java枚舉使用spring的@value注入屬性

背景

在spring中使用@value注解來達(dá)到動(dòng)態(tài)配置線上和預(yù)發(fā)環(huán)境的參數(shù),在普通類中可以隨意使用@value實(shí)現(xiàn),java枚舉enum無法注入,

怎么解決這個(gè)問題?

public enum SpringValueEnum {
    TEACHER(0, "我是老師"),
    STUDENT(1, "我是學(xué)生") {
        @Override
        public String getDesc() {
            return PeopleEnumContainer.name;
        }
    };
    private Integer code;
    private String desc;
    SpringValueEnum(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    @Component
    static class PeopleEnumContainer {
        private static String name;
        @Value("${people.student.desc}")
        public void init(String name) {
            PeopleEnumContainer.name = name;
        }
    }
}

如上,使用內(nèi)部類注入,重寫枚舉屬性get方法來達(dá)到動(dòng)態(tài)替換的目的。

Spring @Value屬性注入使用總結(jié)

@Value注入

不通過配置文件的注入屬性的情況

通過@Value將外部的值動(dòng)態(tài)注入到Bean中,使用的情況有:

  • 注入普通字符串
  • 注入操作系統(tǒng)屬性
  • 注入表達(dá)式結(jié)果
  • 注入其他Bean屬性:注入beanInject對象的屬性another
  • 注入文件資源
  • 注入U(xiǎn)RL資源
@Value("normal")
    private String normal; // 注入普通字符串
    @Value("#{systemProperties['os.name']}")
    private String systemPropertiesName; // 注入操作系統(tǒng)屬性
    @Value("#{ T(java.lang.Math).random() * 100.0 }")
    private double randomNumber; //注入表達(dá)式結(jié)果
    @Value("#{beanInject.another}")
    private String fromAnotherBean; // 注入其他Bean屬性:注入beanInject對象的屬性another,類具體定義見下面
    @Value("classpath:com/hry/spring/configinject/config.txt")
    private Resource resourceFile; // 注入文件資源
    @Value("http://www.baidu.com")
    private Resource testUrl; // 注入U(xiǎn)RL資源

注入其他Bean屬性:注入beanInject對象的屬性another

@Component
public class BeanInject {
    @Value("其他Bean的屬性")
    private String another;
    public String getAnother() {
        return another;
    }
    public void setAnother(String another) {
        this.another = another;
    }
}

注入文件資源:com/hry/spring/configinject/config.txt

test configuration file

測試類:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest(classes=Application.class)
public class ConfiginjectApplicationTest {
    @Autowired
    private BaseValueInject baseValueInject;
    @Test
    public void baseValueInject(){
        System.out.println(baseValueInject.toString());
    }
}

運(yùn)行測試類

normal=normal
systemPropertiesName=Windows 10
randomNumber=35.10603794922444
fromAnotherBean=其他Bean的屬性
resourceFile=test configuration file
testUrl=<html>...<title>百度一下,你就知道</title>...略</html>

通過配置文件的注入屬性的情況

通過@Value將外部配置文件的值動(dòng)態(tài)注入到Bean中。

配置文件主要有兩類:

  • application.properties。application.properties在spring boot啟動(dòng)時(shí)默認(rèn)加載此文件
  • 自定義屬性文件。自定義屬性文件通過@PropertySource加載。@PropertySource可以同時(shí)加載多個(gè)文件,也可以加載單個(gè)文件。如果相同第一個(gè)屬性文件和第二屬性文件存在相同key,則最后一個(gè)屬性文件里的key啟作用。加載文件的路徑也可以配置變量,如下文的${anotherfile.configinject},此值定義在第一個(gè)屬性文件config.properties

第一個(gè)屬性文件config.properties內(nèi)容如下:

${anotherfile.configinject}作為第二個(gè)屬性文件加載路徑的變量值

book.name=bookName
anotherfile.configinject=placeholder

第二個(gè)屬性文件config_placeholder.properties內(nèi)容如下:

book.name.placeholder=bookNamePlaceholder

下面通過@Value(“${app.name}”)語法將屬性文件的值注入bean屬性值,詳細(xì)代碼見:

@Component
// 引入外部配置文件組:${app.configinject}的值來自config.properties。
// 如果相同
@PropertySource({"classpath:com/hry/spring/configinject/config.properties",
    "classpath:com/hry/spring/configinject/config_${anotherfile.configinject}.properties"})
public class ConfigurationFileInject{
    @Value("${app.name}")
    private String appName; // 這里的值來自application.properties,spring boot啟動(dòng)時(shí)默認(rèn)加載此文件
    @Value("${book.name}")
    private String bookName; // 注入第一個(gè)配置外部文件屬性
    @Value("${book.name.placeholder}")
    private String bookNamePlaceholder; // 注入第二個(gè)配置外部文件屬性
    @Autowired
    private Environment env;  // 注入環(huán)境變量對象,存儲(chǔ)注入的屬性值
    public String toString(){
        StringBuilder sb = new StringBuilder();
        sb.append("bookName=").append(bookName).append("\r\n")
        .append("bookNamePlaceholder=").append(bookNamePlaceholder).append("\r\n")
        .append("appName=").append(appName).append("\r\n")
        .append("env=").append(env).append("\r\n")
        // 從eniroment中獲取屬性值
        .append("env=").append(env.getProperty("book.name.placeholder")).append("\r\n");
        return sb.toString();
    }   
}

測試代碼:

Application.java同上文

@RunWith(SpringRunner.class)
@SpringBootTest(classes=Application.class)
public class ConfiginjectApplicationTest {
    @Autowired
    private ConfigurationFileInject configurationFileInject;
    @Test
    public void configurationFileInject(){
        System.out.println(configurationFileInject.toString());
    }
}

測試運(yùn)行結(jié)果

bookName=bookName
bookNamePlaceholder=bookNamePlaceholder
appName=appName
env=StandardEnvironment {activeProfiles=[], defaultProfiles=[default], propertySources=[Inlined Test Properties,systemProperties,systemEnvironment,random,applicationConfig: [classpath:/application.properties],class path resource [com/hry/spring/configinject/config_placeholder.properties],class path resource [com/hry/spring/configinject/config.properties]]}
env=bookNamePlaceholder

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java利用HttpClient模擬POST表單操作應(yīng)用及注意事項(xiàng)

    Java利用HttpClient模擬POST表單操作應(yīng)用及注意事項(xiàng)

    本文主要介紹JAVA中利用HttpClient模擬POST表單操作,希望對大家有所幫助。
    2016-04-04
  • Java中深拷貝,淺拷貝與引用拷貝的區(qū)別詳解

    Java中深拷貝,淺拷貝與引用拷貝的區(qū)別詳解

    這篇文章主要為大家詳細(xì)介紹了Java面試中常遇見的問題:深拷貝、淺拷貝與引用拷貝的區(qū)別,文中通過示例進(jìn)行了詳細(xì)講解,需要的可以參考一下
    2022-08-08
  • Spring事務(wù)失效的問題及解決方案

    Spring事務(wù)失效的問題及解決方案

    本文詳細(xì)分析了Spring事務(wù)失效的原因,并提供了一個(gè)解決方案,在代碼中,事務(wù)傳播屬性設(shè)置為REQUIRES_NEW解決了事務(wù)失效的問題,確保了日志記錄的操作不會(huì)影響主事務(wù)的回滾,同時(shí),文中還總結(jié)了各種事務(wù)傳播屬性的含義和使用場景
    2025-11-11
  • Springboot Activemq整合過程代碼圖解

    Springboot Activemq整合過程代碼圖解

    這篇文章主要介紹了Springboot Activemq整合過程代碼圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • java生成文件夾和文件的簡單示例分享

    java生成文件夾和文件的簡單示例分享

    這篇文章主要介紹了java生成文件夾和文件的簡單示例,需要的朋友可以參考下
    2014-04-04
  • 如何在Java中實(shí)現(xiàn)一個(gè)散列表

    如何在Java中實(shí)現(xiàn)一個(gè)散列表

    這篇文章主要介紹了如何在Java中實(shí)現(xiàn)一個(gè)散列表,建一個(gè)HashMap,以String類型為Key,Int類型為Value,下文具體的操作過程需要的小伙伴可以參考一下
    2022-04-04
  • 使用GraalVM如何將SpringBoot項(xiàng)目打包成exe

    使用GraalVM如何將SpringBoot項(xiàng)目打包成exe

    本文介紹了如何使用GraalVM和Maven將Spring Boot項(xiàng)目打包成可執(zhí)行文件的步驟,并詳細(xì)解釋了在打包過程中遇到的常見錯(cuò)誤及其解決方法
    2024-12-12
  • SpringBoot中接收POST參數(shù)的幾種方式詳解

    SpringBoot中接收POST參數(shù)的幾種方式詳解

    這篇文章主要介紹了SpringBoot中接收POST參數(shù)的幾種方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 如何使用Spring自定義Xml標(biāo)簽

    如何使用Spring自定義Xml標(biāo)簽

    要實(shí)現(xiàn)自定義的xml配置,需要有兩個(gè)默認(rèn)spring配置文件來支持。一個(gè)是spring.schemas,一個(gè)是spring.handlers,前者是為了驗(yàn)證你自定義的xml配置文件是否符合你的格式要求,后者是告訴spring該如何來解析你自定義的配置文件。本文將介紹如何使用Spring自定義Xml標(biāo)簽
    2021-06-06
  • MyBatis-Plus更新字段為null的處理方案

    MyBatis-Plus更新字段為null的處理方案

    在使用 MyBatis-Plus 進(jìn)行開發(fā)時(shí),我們經(jīng)常會(huì)遇到需要更新或插入字段為 null 的場景,然而,MyBatis-Plus 默認(rèn)會(huì)忽略 null 值字段,導(dǎo)致這些字段不會(huì)被更新或插入到數(shù)據(jù)庫中,本文將詳細(xì)介紹如何解決 MyBatis-Plus 更新字段為 null 的問題,需要的朋友可以參考下
    2025-08-08

最新評論

宜兰县| 宜阳县| 五莲县| 德昌县| 博兴县| 满洲里市| 凤山市| 阳江市| 克山县| 清镇市| 榆社县| 信宜市| 文安县| 广昌县| 拉萨市| 阿拉善右旗| 荔浦县| 乌鲁木齐市| 万年县| 屯昌县| 叶城县| 临城县| 潜江市| 南华县| 锦州市| 长泰县| 山阳县| 民勤县| 岫岩| 怀安县| 黑龙江省| 山丹县| 南充市| 志丹县| 甘泉县| 开江县| 连州市| 平乐县| 永修县| 朝阳市| 读书|