亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

背景

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

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

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)部類(lèi)注入,重寫(xiě)枚舉屬性get方法來(lái)達(dá)到動(dòng)態(tài)替換的目的。

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

@Value注入

不通過(guò)配置文件的注入屬性的情況

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

  • 注入普通字符串
  • 注入操作系統(tǒng)屬性
  • 注入表達(dá)式結(jié)果
  • 注入其他Bean屬性:注入beanInject對(duì)象的屬性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對(duì)象的屬性another,類(lèi)具體定義見(jiàn)下面
    @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對(duì)象的屬性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

測(cè)試類(lèi):

@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)行測(cè)試類(lèi)

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

通過(guò)配置文件的注入屬性的情況

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

配置文件主要有兩類(lèi):

  • application.properties。application.properties在spring boot啟動(dòng)時(shí)默認(rèn)加載此文件
  • 自定義屬性文件。自定義屬性文件通過(guò)@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

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

@Component
// 引入外部配置文件組:${app.configinject}的值來(lái)自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; // 這里的值來(lái)自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)境變量對(duì)象,存儲(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();
    }   
}

測(cè)試代碼:

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());
    }
}

測(cè)試運(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)文章

  • MyBatis中的JdbcType映射使用詳解

    MyBatis中的JdbcType映射使用詳解

    這篇文章主要介紹了MyBatis中的JdbcType映射使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • java解析xml匯總_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    java解析xml匯總_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了java解析xml匯總_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Java設(shè)計(jì)模式--適配器模式詳解

    Java設(shè)計(jì)模式--適配器模式詳解

    這篇文章主要介紹了java設(shè)計(jì)模式之適配器模式Adapter的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java設(shè)計(jì)優(yōu)化之單例模式

    java設(shè)計(jì)優(yōu)化之單例模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)優(yōu)化中的單例模式,深入學(xué)習(xí)java單例模式,感興趣的朋友可以參考一下
    2016-03-03
  • 詳解mall整合SpringBoot+MyBatis搭建基本骨架

    詳解mall整合SpringBoot+MyBatis搭建基本骨架

    這篇文章主要介紹了詳解mall整合SpringBoot+MyBatis搭建基本骨架,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 一文帶你深入了解Java中延時(shí)任務(wù)的實(shí)現(xiàn)

    一文帶你深入了解Java中延時(shí)任務(wù)的實(shí)現(xiàn)

    延時(shí)任務(wù)相信大家都不陌生,在現(xiàn)實(shí)的業(yè)務(wù)中應(yīng)用場(chǎng)景可以說(shuō)是比比皆是。這篇文章主要為大家介紹幾種實(shí)現(xiàn)延時(shí)任務(wù)的辦法,感興趣的可以了解一下
    2022-11-11
  • Mybatis中 mapper-locations和@MapperScan的作用

    Mybatis中 mapper-locations和@MapperScan的作用

    這篇文章主要介紹了Mybatis中 mapper-locations和@MapperScan的作用,mybatis.mapper-locations在SpringBoot配置文件中使用,作用是掃描Mapper接口對(duì)應(yīng)的XML文件,需要的朋友可以參考下
    2023-05-05
  • 深入理解mybatis的ParamNameResolver

    深入理解mybatis的ParamNameResolver

    ParamNameResolver是 MyBatis 中的一個(gè)重要組件,它為 MyBatis 提供了一種方便的方式來(lái)獲取方法參數(shù)的名稱(chēng),本文主要介紹了深入理解mybatis的ParamNameResolver,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • 關(guān)于mybatis3中幾個(gè)@Provider的使用方式

    關(guān)于mybatis3中幾個(gè)@Provider的使用方式

    這篇文章主要介紹了關(guān)于mybatis3中幾個(gè)@Provider的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Windows使用多個(gè)JDK的方法詳解

    Windows使用多個(gè)JDK的方法詳解

    本文介紹了如何在Windows系統(tǒng)中同時(shí)使用多個(gè)JDK版本(JDK8和JDK21),并詳細(xì)描述了修改環(huán)境變量和Path變量的步驟,以實(shí)現(xiàn)JDK版本的切換
    2024-12-12

最新評(píng)論