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

Spring注解之@Value詳解

 更新時(shí)間:2024年01月02日 10:29:21   作者:luffylv  
這篇文章主要介紹了Spring注解之@Value詳解,@Value可以修飾屬性、方法、參數(shù)、注釋類(lèi)型,編譯器會(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ù)、注釋類(lèi)型。
  • 編譯器會(huì)將 @Value注解的信息保留在 .class 文件中,并且能被虛擬機(jī)讀取。
  • @Value可以出現(xiàn)在 javadoc 中。
  • 該注解中的String value(); 意味著,@Value能指定參數(shù)。

@Value的用法

@Value可以獲取配置文件中的值,設(shè)置給屬性,也可以引用Bean的屬性值。下面通過(guò)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均沒(méi)有該配置,設(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)類(lè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é)果如下:

在這里插入圖片描述

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

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

三、@Value引用Bean的屬性值

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

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

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

User類(lèi):

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

配置一個(gè)TestConfig類(lèi),用于產(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 類(lèi)用于測(cè)試,其有一個(gè)userName屬性,通過(guò)@Value注解將容器中名為user的bean的name屬性注入給userName。@PostConstruct注解的方法于該類(lèi)的構(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)目后通過(guò)控制臺(tái)日志可以看到,userName的值為zhangsan??刂婆_(tái)日志如下

在這里插入圖片描述

總結(jié)

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

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

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

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

相關(guān)文章

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

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

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

    解決springboot的findOne方法沒(méi)有合適的參數(shù)使用問(wèn)題

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

    springSecurity+jwt使用小結(jié)

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

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

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

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

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

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

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

    詳解Spring MVC的攔截器與異常處理機(jī)制

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

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

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

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

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

    Java實(shí)現(xiàn)ATM取款機(jī)程序

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

最新評(píng)論