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

Spring注解之@Value詳解

 更新時(shí)間:2024年01月02日 10:29:21   作者:luffylv  
這篇文章主要介紹了Spring注解之@Value詳解,@Value可以修飾屬性、方法、參數(shù)、注釋類型,編譯器會(huì)將?@Value注解的信息保留在?.class?文件中,并且能被虛擬機(jī)讀取,需要的朋友可以參考下

@Value

@Value注解位于spring-beans中,以下是@Value注解的源碼:

package org.springframework.beans.factory.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
    String value();
}

由上可以看出:

  • @Value可以修飾屬性、方法、參數(shù)、注釋類型。
  • 編譯器會(huì)將 @Value注解的信息保留在 .class 文件中,并且能被虛擬機(jī)讀取。
  • @Value可以出現(xiàn)在 javadoc 中。
  • 該注解中的String value(); 意味著,@Value能指定參數(shù)。

@Value的用法

@Value可以獲取配置文件中的值,設(shè)置給屬性,也可以引用Bean的屬性值。下面通過SpringBoot項(xiàng)目講解@Value的用法。

一、@Value引用配置文件中的屬性值

使用@Value引用配置文件中的屬性值的方式為

@Value("${屬性名}")

application.yml的配置

application.yml文件的配置如下:

ymlname: only-yml
student:
  name: yml里的name
  age: 20
  tel : 666

application.properties的配置

application.properties文件的配置如下:

在這里插入圖片描述

測(cè)試用Controller

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestValueController {
    // 只在application.yml中配置
    @Value("${ymlname}")
    private String ymlname;
    // 只在application.properties中配置
    @Value("${propname}")
    private String propname;
    // application.yml和application.properties均有該配置
    @Value("${student.name}")
    private String name;
    // 配置文件中的字段名和屬性名不一致
    @Value("${student.age}")
    private int nianling;
    // application.yml和application.properties均沒有該配置,設(shè)置默認(rèn)值
    @Value("${student.score:100}")
    private int score;
    // application.yml有該配置,同時(shí)設(shè)置默認(rèn)值
    @Value("${student.tel:888}")
    public int tel;
    @ResponseBody
    @RequestMapping(value = "/test")
    public String testValue() {
        return "ymlname —— " + ymlname + "<br/>" +
                "propname —— " + propname + "<br/>" +
                "name —— " + name + "<br/>" +
                "nianling —— " + nianling + "<br/>" +
                "score —— " + score + "<br/>" +
                "tel —— " + tel;
    }
}

啟動(dòng)項(xiàng)目,查看結(jié)果

啟動(dòng)SpringBoot項(xiàng)目,瀏覽器輸入localhost:8080/test,界面顯示如下。

在這里插入圖片描述

二、@Value作用于靜態(tài)變量

正常情況下 @Value不可作用于靜態(tài)屬性

如下例。 啟動(dòng)類上做如下修改:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootTestApplication {
    @Value("${student.name}")
    public static String name;
    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
        System.out.println("name: " + name);
    }
}

打印結(jié)果如下:

在這里插入圖片描述

通過上例可以看出,使用@Value注解修飾靜態(tài)屬性,啟動(dòng)項(xiàng)目時(shí)不會(huì)報(bào)錯(cuò),但是也不會(huì)給該靜態(tài)屬性設(shè)置值。 可以通過set方法給靜態(tài)屬性設(shè)置配置文件中的屬性值。

    public static String name;
    @Value("${student.name}")
    public void setName(String param) {
    	name = param;
    }

三、@Value引用Bean的屬性值

使用@Value引用Bean的屬性值的方式和引用配置文件中的屬性值方式類似。使用方式為

@Value("#{bean的名字.屬性值}")

以通過@Value注解引用User實(shí)例的name屬性值為例;

User類:

import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class User {
    private String name;
    private String password;
}

配置一個(gè)TestConfig類,用于產(chǎn)生一個(gè)name為zhangsan,password為66666的名為user的bean實(shí)例交由spring容器管理。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TestConfig {
    @Bean(name = "user")
    public User getUser() {
        return new User("zhangsan","66666");
    }
}

TestBeanPro 類用于測(cè)試,其有一個(gè)userName屬性,通過@Value注解將容器中名為user的bean的name屬性注入給userName。@PostConstruct注解的方法于該類的構(gòu)造方法執(zhí)行完成后執(zhí)行。在本例中,該初始化方法用于打印user的name屬性是否引用成功。

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Slf4j
@Component
public class TestBeanPro {
    @Value("#{user.name}")
    private String userName;
    @PostConstruct
    public void init() {
        log.info("***************************** userName:{}.", userName);
    }
}

啟動(dòng)項(xiàng)目后通過控制臺(tái)日志可以看到,userName的值為zhangsan??刂婆_(tái)日志如下

在這里插入圖片描述

總結(jié)

從以上測(cè)試結(jié)果可以看出:

  • application.yml和application.properties中配置的值都可以通過@Value注解獲??;
  • 若application.yml和application.properties同時(shí)配有同一個(gè)變量的值,則以application.yml的值為主;
  • 配置文件中的字段名和@Value修飾的屬性名可以不一致
  • @Value若從配置文件中獲取不到值,則設(shè)置的默認(rèn)值才生效。
  • 若配置文件中有配置,則默認(rèn)值不生效。

通過對(duì)@Value的以上分析,我們還不難看出,SpringBoot加載配置文件的順序?yàn)?yml > .properties。即yml類型的優(yōu)先級(jí)高于properties類型的配置文件。

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

相關(guān)文章

  • 一文詳細(xì)講解Java中有哪些鎖

    一文詳細(xì)講解Java中有哪些鎖

    在Java編程中鎖是一種同步機(jī)制,用于確保多個(gè)線程在訪問共享資源時(shí)的一致性和正確性,這篇文章主要介紹了Java中有哪些鎖的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • SpringBoot集成Tomcat服務(wù)架構(gòu)配置

    SpringBoot集成Tomcat服務(wù)架構(gòu)配置

    這篇文章主要為大家介紹了SpringBoot集成Tomcat服務(wù)架構(gòu)配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 解析Spring Boot內(nèi)嵌tomcat關(guān)于getServletContext().getRealPath獲取得到臨時(shí)路徑的問題

    解析Spring Boot內(nèi)嵌tomcat關(guān)于getServletContext().getRealPath獲取得到臨時(shí)

    大家都很糾結(jié)這個(gè)問題在使用getServletContext().getRealPath()得到的是臨時(shí)文件的路徑,每次重啟服務(wù),這個(gè)臨時(shí)文件的路徑還好變更,下面小編通過本文給大家分享Spring Boot內(nèi)嵌tomcat關(guān)于getServletContext().getRealPath獲取得到臨時(shí)路徑的問題,一起看看吧
    2021-05-05
  • 從入門到實(shí)戰(zhàn)詳解如何使用Apache?POI操作Word文檔

    從入門到實(shí)戰(zhàn)詳解如何使用Apache?POI操作Word文檔

    Apache?POI是Java生態(tài)中最流行的Microsoft?Office文檔操作庫之一,它為Word文檔提供了全面的API支持,下面我們來看看如何使用Apache?POI進(jìn)行word文檔的操作吧
    2025-06-06
  • 配置springboot項(xiàng)目動(dòng)靜分離打包分離lib方式

    配置springboot項(xiàng)目動(dòng)靜分離打包分離lib方式

    本文介紹了如何將Spring?Boot工程中的靜態(tài)資源和配置文件分離出來,以減少jar包大小,方便修改配置文件,通過在jar包同級(jí)目錄創(chuàng)建config目錄,并在pom文件中進(jìn)行相應(yīng)配置,可以實(shí)現(xiàn)配置文件的外部化,打包后的jar包和lib文件夾中分別存放了第三方j(luò)ar包和靜態(tài)資源文件
    2025-02-02
  • Spring注入方式與原理分析

    Spring注入方式與原理分析

    本文介紹了Spring框架中的依賴注入(DI)機(jī)制,包括基于XML和注解的依賴注入方式,如構(gòu)造器注入、setter注入和基于屬性(字段)注入,還討論了如何解決接口多實(shí)現(xiàn)類的注入問題,以及如何通過applicationContext手動(dòng)獲取bean
    2026-05-05
  • 相冊(cè)管理系統(tǒng)(Java表單+xml數(shù)據(jù)庫存儲(chǔ))

    相冊(cè)管理系統(tǒng)(Java表單+xml數(shù)據(jù)庫存儲(chǔ))

    這篇文章主要為大家詳細(xì)介紹了相冊(cè)管理系統(tǒng)的實(shí)現(xiàn)步驟,Java表單的文件上傳和下載,xml數(shù)據(jù)庫存儲(chǔ)信息,感興趣的小伙伴們可以參考一下
    2016-07-07
  • SpringBoot3中使用虛擬線程的詳細(xì)過程

    SpringBoot3中使用虛擬線程的詳細(xì)過程

    虛擬線程主要解決的問題是減少I/O密集型任務(wù)的I/O阻塞,這篇文章主要介紹了SpringBoot3中使用虛擬線程的詳細(xì)過程,需要的朋友可以參考下
    2025-06-06
  • 成功解決IDEA2020 Plugins 連不上、打不開的方法

    成功解決IDEA2020 Plugins 連不上、打不開的方法

    這篇文章主要介紹了成功解決IDEA2020 Plugins 連不上、打不開的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java保留兩位小數(shù)的實(shí)現(xiàn)方法

    Java保留兩位小數(shù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了 Java保留兩位小數(shù)的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評(píng)論

道孚县| 体育| 延庆县| 景宁| 隆安县| 赤峰市| 济源市| 石楼县| 安陆市| 陕西省| 芜湖县| 福安市| 儋州市| 砀山县| 东明县| 香河县| 古交市| 连州市| 台江县| 永胜县| 东源县| 临汾市| 沙田区| 四平市| 赤峰市| 临武县| 十堰市| 怀柔区| 山丹县| 锦屏县| 澜沧| 高邑县| 南溪县| 麟游县| 达日县| 于都县| 基隆市| 道孚县| 常宁市| 陈巴尔虎旗| 新建县|