Spring中的@Value和@PropertySource注解详解

 更新时间:2023年11月04日 11:10:36   作者:大树下躲雨  
这篇文章主要介绍了Spring中的@Value和@PropertySource注解详解,@PropertySource:读取外部配置文件中的key-value保存到运行的环境变量中,本文提供了部分实现代码,需要的朋友可以参考下

 一、@Value和@PropertySource

1、@Value

@Value注解:为属性赋值

赋值方式:

  • 基本数值
  • SpEl表达式 #{}
  • ${},读取配置文件[xxx.properties]中的值,配合注解@PropertySource使用
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
   /**
    * The actual value expression such as <code>#{systemProperties.myProp}</code>
    * or property placeholder such as <code>${my.app.myProp}</code>.
    */
   String value();
}

2、@PropertySource

@PropertySource:读取外部配置文件中的key-value保存到运行的环境变量中

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource {
   String name() default "";
   String[] value();
   boolean ignoreResourceNotFound() default false;
   String encoding() default "";
   Class<? extends PropertySourceFactory> factory() default PropertySourceFactory.class;
}

二、@Value和@PropertySource案例

1、项目结构

在这里插入图片描述

2、Person

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Person {
    /**
     * @Value赋值方式1:基本数值
     */
    @Value("张三")
    private String name;
    /**
     * @Value赋值方式2:SpEl表达式  #{}
     */
    @Value("#{ 20-2 }")
    private int age;
    /**
     * @Value赋值方式3:${},读取配置文件[xxx.properties]中的值
     */
    @Value("${person.phone}")
    private String phone;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", phone='" + phone + '\'' +
                '}';
    }
}

3、配置类

import org.springframework.context.annotation.*;

/**
 * 使用@PropertySource注解可以读取外部配置文件中的key-value保存到运行的环境变量中
 */
@PropertySource(value = {"classpath:/person.properties"},encoding = "UTF-8")
@ComponentScan({"com.dashu"})
@Configuration
public class BeanConfig {
}

4、外部文件person.properties

person.phone = 11111111

5、测试类

import com.dashu.bean.Person;
import com.dashu.config.BeanConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
public class Main {
    public static void main(String[] args) {
        //加载配置类获取容器
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
        //容器中获取Person
        Person person = annotationConfigApplicationContext.getBean(Person.class);
        //打印
        System.out.println(person);
        System.out.println("--------------------");
        /**
         * 获取运行时环境实例
         */
        ConfigurableEnvironment environment = annotationConfigApplicationContext.getEnvironment();
        /**
         * 根据外部文件的key,从环境中获取value
         */
        String property = environment.getProperty("person.phone");
        //打印
        System.out.println(property);
    }
}

6、测试结果

在这里插入图片描述

到此这篇关于Spring中的@Value和@PropertySource注解详解的文章就介绍到这了,更多相关@Value和@PropertySource注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Java中避免空指针的方法

    关于Java中避免空指针的方法

    这篇文章主要介绍了关于Java中避免空指针的方法,空指针异常就是我们在对空对象进行的任何操作都会报空指针异常,所谓的指针,就是java中的对象的引用,比如String s;这个就是指针,需要的朋友可以参考下
    2023-07-07
  • spring boot利用docker构建gradle项目的实现步骤

    spring boot利用docker构建gradle项目的实现步骤

    这篇文章主要给大家介绍了关于spring boot利用docker构建gradle项目的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2018-05-05
  • Java从控制台接受输入字符的简单方法

    Java从控制台接受输入字符的简单方法

    这篇文章主要介绍了Java从控制台接受输入字符的简单方法,需要的朋友可以参考下
    2014-02-02
  • java之TreeUtils生成一切对象树形结构案例

    java之TreeUtils生成一切对象树形结构案例

    这篇文章主要介绍了java之TreeUtils生成一切对象树形结构案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringBoot将项目打成war包步骤解析

    SpringBoot将项目打成war包步骤解析

    这篇文章主要介绍了SpringBoot将项目打成war包步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java线程池运行状态监控实现解析

    Java线程池运行状态监控实现解析

    这篇文章主要介绍了Java线程池运行状态监控实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java设计模式-组合模式详解

    java设计模式-组合模式详解

    这篇文章主要介绍了JAVA设计模式之组合模式,简单说明了组合模式的原理,并结合实例分析了java组合模式的具体用法,需要的朋友可以参考下
    2021-07-07
  • 整理Java编程中常用的基本描述符与运算符

    整理Java编程中常用的基本描述符与运算符

    这篇文章主要介绍了Java编程中常用的基本描述符与运算符整理,包括运算符优先级等平时经常查看反复记忆的知识点,需要的朋友可以参考下
    2016-02-02
  • Mybatis Trim标签用法简单介绍

    Mybatis Trim标签用法简单介绍

    这篇文章主要介绍了Mybatis Trim标签用法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • Java 内置接口 Serializable示例详解

    Java 内置接口 Serializable示例详解

    这篇文章主要为大家介绍了Java 内置接口 Serializable示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论