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

Spring注解之@Value詳解

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

@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ù)、注釋類型。
  • 編譯器會將 @Value注解的信息保留在 .class 文件中,并且能被虛擬機讀取。
  • @Value可以出現(xiàn)在 javadoc 中。
  • 該注解中的String value(); 意味著,@Value能指定參數(shù)。

@Value的用法

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

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

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

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

application.yml的配置

application.yml文件的配置如下:

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

application.properties的配置

application.properties文件的配置如下:

在這里插入圖片描述

測試用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è)置默認(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;
    }
}

啟動項目,查看結(jié)果

啟動SpringBoot項目,瀏覽器輸入localhost:8080/test,界面顯示如下。

在這里插入圖片描述

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

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

如下例。 啟動類上做如下修改:

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)屬性,啟動項目時不會報錯,但是也不會給該靜態(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實例的name屬性值為例;

User類:

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

配置一個TestConfig類,用于產(chǎn)生一個name為zhangsan,password為66666的名為user的bean實例交由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 類用于測試,其有一個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);
    }
}

啟動項目后通過控制臺日志可以看到,userName的值為zhangsan。控制臺日志如下

在這里插入圖片描述

總結(jié)

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

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

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

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

相關(guān)文章

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

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

    在Java編程中鎖是一種同步機制,用于確保多個線程在訪問共享資源時的一致性和正確性,這篇文章主要介紹了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獲取得到臨時路徑的問題

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

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

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

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

    配置springboot項目動靜分離打包分離lib方式

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

    Spring注入方式與原理分析

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

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

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

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

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

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

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

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

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

最新評論

广元市| 巴彦淖尔市| 武穴市| 卢龙县| 屯门区| 寻乌县| 思南县| 大同县| 长沙县| 阿鲁科尔沁旗| 江达县| 德惠市| 漳州市| 汶川县| 尼木县| 九龙城区| 瑞安市| 樟树市| 巩义市| 永年县| 崇仁县| 新安县| 定边县| 佛坪县| 日土县| 英德市| 长白| 宽城| 米易县| 桂平市| 铜山县| 嘉义县| 迁西县| 陕西省| 赤峰市| 镇安县| 高安市| 桃园县| 景德镇市| 石城县| 深水埗区|