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

Spring中@Value注解詳細圖文講解

 更新時間:2023年11月27日 11:18:47   作者:迎戰(zhàn)未來  
在spring中有兩種注入方式一種是XML文件注入,另一種則是注解注入,這篇文章主要給大家介紹了關于Spring中@Value注解的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

Spring中的@Value注解詳解

概述

本文配置文件為yml文件

在使用spring框架的項目中,@Value是經(jīng)常使用的注解之一。其功能是將與配置文件中的鍵對應的值分配給其帶注解的屬性。在日常使用中,我們常用的功能相對簡單。本文使您系統(tǒng)地了解@Value的用法。

@Value 注解可以用來將外部的值動態(tài)注入到 Bean 中,在 @Value 注解中,可以使${} 與 #{} ,它們的區(qū)別如下:

(1)@Value(“${}”):可以獲取對應屬性文件中定義的屬性值。

(2)@Value(“#{}”):表示 SpEl 表達式通常用來獲取 bean 的屬性,或者調(diào)用 bean 的某個方法。

使用方式

根據(jù)注入的內(nèi)容來源,@ Value屬性注入功能可以分為兩種:通過配置文件進行屬性注入和通過非配置文件進行屬性注入。

非配置文件注入的類型如下:

  • 注入普通字符串
  • 注入操作系統(tǒng)屬性
  • 注入表達式結(jié)果
  • 注入其他bean屬性
  • 注入URL資源

基于配置文件的注入

首先,讓我們看一下配置文件中的數(shù)據(jù)注入,無論它是默認加載的application.yml還是自定義my.yml文檔(需要@PropertySource額外加載)。

application.yml文件配置,獲得里面配置的端口號

程序源代碼

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    /**
     *Get in application.yml
     */
    @Value("${server.port}")
    private String port;
    
    @Test
    public  void  getPort(){
       System.out.println(port);
    }
}

程序結(jié)果

自定義yml文件,application-config.yml文件配置,獲得里面配置的用戶密碼值

注意,如果想導入自定義的yml配置文件,應該首先把自定義文件在application.yml文件中進行注冊,自定義的yml文件要以application開頭,形式為application-fileName

配置信息

測試程序

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {
    /**
     *Get in application-config.yml
     */
    @Value("${user.password}")
    private String password;
    
    @Test
    public  void  getPassword(){
       System.out.println(password);
    }
}

程序結(jié)果

基于配置文件一次注入多個值

配置信息

測試程序

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    /**
     *Injection array (automatically split according to ",")
     */
    @Value("${tools}")
    private String[] toolArray;
    
    /**
     *Injection list form (automatic segmentation based on "," and)
     */
    @Value("${tools}")
    private List<String> toolList;
    
    @Test
    public  void  getTools(){
       System.out.println(toolArray);
       System.out.println(toolList);
    }
}

程序結(jié)果

基于非配置文件的注入

在使用示例說明基于非配置文件注入屬性的實例之前,讓我們看一下SpEl。

Spring Expression Language是Spring表達式語言,可以在運行時查詢和操作數(shù)據(jù)。使用#{…}作為操作符號,大括號中的所有字符均視為SpEl。

讓我們看一下特定實例場景的應用:

注入普通字符串

測試程序

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    // 直接將字符串賦值給 str 屬性
    @Value("hello world")
    private String str;
    
    
    @Test
    public  void  getValue(){
    
        System.out.println(str);
    }	
}

程序結(jié)果

注入操作系統(tǒng)屬性

可以利用 @Value 注入操作系統(tǒng)屬性。

測試程序

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    @Value("#{systemProperties['os.name']}")
    private String osName; // 結(jié)果:Windows 10
    
    @Test
    public  void  getValue(){
    
        System.out.println(osName);
    }
}

程序結(jié)果

注入表達式結(jié)果

在 @Value 中,允許我們使用表達式,然后自動計算表達式的結(jié)果。將結(jié)果復制給指定的變量。如下

測試程序

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {
    
    // 生成一個隨機數(shù)
    @Value("#{ T(java.lang.Math).random() * 1000.0 }")
    private double randomNumber;
    
    @Test
    public  void  getValue(){
    
        System.out.println(randomNumber);
    }
}

程序結(jié)果

注入其他bean屬性

其他Bean

package cn.wideth.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

//其他bean,自定義名稱為 myBeans
@Component("myBeans")
public class OtherBean {
    
    @Value("OtherBean的NAME屬性")
    private String name;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

測試程序

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {
    
    @Value("#{myBeans.name}")
    private String fromAnotherBean;
    
    @Test
    public  void  getValue(){
    
        System.out.println(fromAnotherBean);
    }
}

程序結(jié)果

注入URL資源

測試程序

package cn.wideth.controller;

import cn.wideth.PdaAndIpadApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import java.net.URL;

@RunWith(SpringRunner.class)
@SpringBootTest()
@ContextConfiguration(classes = PdaAndIpadApplication.class)
public class ValueController {

    /**
     *注入 URL 資源
     */
    @Value("https://www.baidu.com/")
    private URL homePage;
    
    @Test
    public  void  getValue(){
    
        System.out.println(homePage);
    }
} 

程序結(jié)果

總結(jié) 

到此這篇關于Spring中@Value注解的文章就介紹到這了,更多相關Spring @Value注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java設計模式之簡單工廠模式簡述

    java設計模式之簡單工廠模式簡述

    這篇文章主要為大家詳細介紹了java設計模式之簡單工廠模式,簡單工廠模式的實質(zhì)是由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定應該創(chuàng)建哪一個產(chǎn)品類的實例,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java通過反射來打印類的方法實現(xiàn)

    Java通過反射來打印類的方法實現(xiàn)

    本文主要介紹了Java通過反射來打印類的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 基于springboot+enum配置化的方法

    基于springboot+enum配置化的方法

    本文主要介紹利用Springboot結(jié)合枚舉類enum進行自定義參數(shù)的初始化和應用,通過@Value注解實現(xiàn)參數(shù)的動態(tài)注入,以實現(xiàn)靈活可維護的配置管理,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • Java鎖之可重入鎖介紹

    Java鎖之可重入鎖介紹

    這篇文章主要介紹了Java鎖之可重入鎖介紹,可重入鎖,也叫做遞歸鎖,指的是同一線程外層函數(shù)獲得鎖之后,內(nèi)層遞歸函數(shù)仍然有獲取該鎖的代碼,但不受影響,需要的朋友可以參考下
    2014-11-11
  • java利用遞歸算法實現(xiàn)對文件夾的刪除功能

    java利用遞歸算法實現(xiàn)對文件夾的刪除功能

    這篇文章主要介紹了java利用遞歸算法實現(xiàn)對文件夾的刪除功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • java導出pdf文件的詳細實現(xiàn)方法

    java導出pdf文件的詳細實現(xiàn)方法

    這篇文章主要介紹了java導出pdf文件的詳細實現(xiàn)方法,包括制作模板、獲取中文字體文件、實現(xiàn)后端服務以及前端發(fā)起請求并生成下載鏈接,需要的朋友可以參考下
    2025-03-03
  • javaWeb實現(xiàn)簡單文件上傳

    javaWeb實現(xiàn)簡單文件上傳

    這篇文章主要為大家詳細介紹了JAVAWeb實現(xiàn)簡單文件上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java?axios與spring前后端分離傳參規(guī)范總結(jié)

    Java?axios與spring前后端分離傳參規(guī)范總結(jié)

    這篇文章主要介紹了Java?axios與spring前后端分離傳參規(guī)范總結(jié),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Java編程接口回調(diào)一般用法代碼解析

    Java編程接口回調(diào)一般用法代碼解析

    本文的主要內(nèi)容是同過實際代碼向大家展示Java編程中接口回調(diào)的一般用法,具有一定參考價值,需要的朋友可以了解下
    2017-09-09
  • java音樂播放器課程設計

    java音樂播放器課程設計

    這篇文章主要為大家詳細介紹了java音樂播放器的課程設計,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論

永州市| 台南县| 祁东县| 巢湖市| 教育| 都匀市| 麻阳| 洪雅县| 阜城县| 南雄市| 左云县| 威海市| 玛多县| 新巴尔虎右旗| 恭城| 平罗县| 金阳县| 肃南| 沁水县| 塔河县| 大城县| 集安市| 巴林右旗| 呼和浩特市| 榆树市| 鄂温| 长子县| 都江堰市| 吉木乃县| 新宾| 黔西县| 日土县| 镇康县| 万盛区| 潮安县| 汤阴县| 资溪县| 扎囊县| 灌南县| 大兴区| 辉县市|