欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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è)置默認值
    @Value("${student.score:100}")
    private int score;
    // application.yml有該配置,同時設(shè)置默認值
    @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注解獲??;
  • 若application.yml和application.properties同時配有同一個變量的值,則以application.yml的值為主;
  • 配置文件中的字段名和@Value修飾的屬性名可以不一致
  • @Value若從配置文件中獲取不到值,則設(shè)置的默認值才生效。
  • 若配置文件中有配置,則默認值不生效。

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

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

相關(guān)文章

  • 淺析java中常用的定時任務(wù)框架-單體

    淺析java中常用的定時任務(wù)框架-單體

    這篇文章主要帶大家了解常用的單體應(yīng)用定時任務(wù)框架以及掌握定時任務(wù)在單體中如何使用,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • 解決springboot的findOne方法沒有合適的參數(shù)使用問題

    解決springboot的findOne方法沒有合適的參數(shù)使用問題

    這篇文章主要介紹了解決springboot的findOne方法沒有合適的參數(shù)使用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springSecurity+jwt使用小結(jié)

    springSecurity+jwt使用小結(jié)

    本文介紹了使用Spring Security與JWT進行身份驗證和授權(quán),實現(xiàn)用戶認證和授權(quán)的詳細流程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Java的List集合中泛型使用詳解

    Java的List集合中泛型使用詳解

    這篇文章主要介紹了Java的List集合中泛型使用詳解,泛型類,如果沒有指定具體的數(shù)據(jù)類型,此時,操作類型是Object,泛型的類型參數(shù)只能是類類型,不能是基本數(shù)據(jù)類型,需要的朋友可以參考下
    2023-12-12
  • mybatisplus下劃線駝峰轉(zhuǎn)換的問題解決

    mybatisplus下劃線駝峰轉(zhuǎn)換的問題解決

    在mybatis-plus中,下劃線-駝峰自動轉(zhuǎn)換可能導(dǎo)致帶下劃線的字段查詢結(jié)果為null,本文就來介紹一下mybatisplus下劃線駝峰轉(zhuǎn)換的問題解決,感興趣的可以了解一下
    2024-10-10
  • JAVA用for循環(huán)打印空心菱形

    JAVA用for循環(huán)打印空心菱形

    大家好,本篇文章主要講的是JAVA用for循環(huán)打印空心菱形,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 詳解Spring MVC的攔截器與異常處理機制

    詳解Spring MVC的攔截器與異常處理機制

    這篇文章主要為大家詳細介紹了Spring MVC的攔截器與異常處理機制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 關(guān)于Java中try finally return語句的執(zhí)行順序淺析

    關(guān)于Java中try finally return語句的執(zhí)行順序淺析

    這篇文章主要介紹了關(guān)于Java中try finally return語句的執(zhí)行順序淺析,需要的朋友可以參考下
    2017-08-08
  • 淺談java中文本框和文本區(qū)

    淺談java中文本框和文本區(qū)

    本文給大家介紹的是java中的文本框和文本區(qū)的概念和使用方法,以及簡單的示例,十分實用,有需要的小伙伴可以參考下。
    2015-06-06
  • Java實現(xiàn)ATM取款機程序

    Java實現(xiàn)ATM取款機程序

    這篇文章主要為大家詳細介紹了Java實現(xiàn)ATM取款機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論