基于Spring boot @Value 注解注入属性值的操作方法

本文主要介绍Spring @Value 注解注入属性值的使用方法的分析,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的参考学习价值

在使用spring框架的项目中,@Value是经常使用的注解之一。其功能是将与配置文件中的键对应的值分配给其带注解的属性。在日常使用中,我们常用的功能相对简单。本文使您系统地了解@Value的用法。

@Value注入形式

  • 根据注入的内容来源,@ Value属性注入功能可以分为两种:通过配置文件进行属性注入和通过非配置文件进行属性注入。
  • 非配置文件注入的类型如下:
  • 注入普通字符串注入操作系统属性注射表达结果注入其他bean属性注入文件资源注入URL资源

基于配置文件的注入

首先,让我们看一下配置文件中的数据注入,无论它是默认加载的application.properties还是自定义my.properties文档(需要@PropertySource额外加载)。例如:application.properties属性值以以下形式定义:

user.name=admin

my.properties配置文件中定义的属性如下:

user.password=pwd123

然后,在bean中使用@Value,如下所示:

@PropertySource("classpath:my.properties")
@RestController
public class ValueController {

 /**
 *Get in application.properties Properties configured in
 */
 @Value("${user.name}")
 private String name;

 /**
 *Get in my.properties Configuration properties in
 */
 @Value("${user.password}")
 private String password;

}

区别在于,在spring boot项目中,如果使用my.properties文件,则需要通过类中的@ PropertySource导入配置文件,而application.properties中的属性将自动加载。

同时,您不仅可以通过@Value注入单个属性,还可以采用数组和列表的形式。例如,配置如下:

tools=car,train,airplane

可以通过以下方式注入它:

/**
 *Injection array (automatically split according to ",")
 */
@Value("${tools}")
private String[] toolArray;

/**
 *Injection list form (automatic segmentation based on "," and)
 */
@Value("${tools}")
private List<String> toolList;

默认情况下,spring将以“,”分割,并将其转换为相应的数组或列表。

基于非配置文件的注入

在使用示例说明基于非配置文件注入属性的实例之前,让我们看一下SpEl。

Spring Expression Language是Spring表达式语言,可以在运行时查询和操作数据。使用#{…}作为操作符号,大括号中的所有字符均视为SpEl。

让我们看一下特定实例场景的应用:

/**
 *实例化一个字符串,并赋予默认值
 */
@Value
private String wechatSubscription;

/**
 *读取系统的环境变量
 */
@Value("#{systemProperties['os.name']}")
private String systemPropertiesName;

/**
 *注入表达式计算结果
 */
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber;

/**
 *读取一个bean:config的tool属性并注入
 */
@Value("#{config.tool}")
private String tool;

/**
 *将words用“|”分隔为字符串数组
 */
@Value("#{'${words}'.split('\|')}")
private List<String> numList;

/**
 *注入一个文件资源
 */
@Value("classpath:config.xml")
private Resource resourceFile;

/**
 *注入 URL 资源
 */
@Value("http://www.choupangxia.com")
private URL homePage;

上面的示例显示了以下方案的使用:

  • 直接注入字符串等效于实例化时直接初始化字符串。初始化空串
  • 通过#{}注入系统变量。
  • 表达式计算结果通过#{}注入。
  • 通过#{}注入其他bean的属性。
  • 通过{}和$ {}的组合注入属性,然后拆分。
  • 注入文件资源,并将相应的字符串值转换为相应的资源文件。
  • 注入URL资源并将相应的URL字符串转换为URL

默认值注入

无论使用#{}(SpEL)还是$ {}进行属性注入,当无法获得相应的值时,都需要设置默认值,可以通过以下方式进行设置。

/**
 *If IP is not configured in the property, the default value is used
 */
@Value("${ip:127.0.0.1}")
private String ip;

/**
 *If the value of port is not obtained in the system properties, 8888 is used.
 */
@Value("#{systemProperties['port']?:'8888'}")
private String port;

$ {}中直接使用“:”来设置未定义或空值的默认值,而#{}则需要使用“?:”来设置未设置属性的默认值。

总结

到此这篇关于结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot的文章就介绍到这了,更多相关Spring @Value 注解注入属性值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Spring通过@Value注解注入属性的几种方式

    场景 假如有以下属性文件dev.properties, 需要注入下面的tag tag=123 通过PropertyPlaceholderConfigurer <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="dev.properties" /&

  • Spring @Value注解失效问题解决方案

    项目使用的是SSM体系,spring的配置如下,配置没问题,因为我发现其他文件中的@Value可以使用,只有一处@Value失效了. spring-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.or

  • Spring4如何自定义@Value功能详解

    前言 本文主要给大家介绍了关于Spring4自定义@Value功能的相关内容,使用的Spring版本4.3.10.RELEASE,下面话不多说了,来一起看看详细的介绍吧. @Value在Spring中,功能非常强大,可以注入一个配置项,可以引用容器中的Bean(调用其方法),也可以做一些简单的运算 如下的一个简单demo,演示@Value的用法 import org.springframework.stereotype.Service; /** * 测试Bean */ @Service("use

  • Springboot @Value获取值为空问题解决方案

    这篇文章主要介绍了Springboot @Value获取值为空问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在spring中,常常使用 @Value("${property}") 从application.properties中取值,需要注意两点 使用 @Value 的类不能使用 new 关键字进行实例化对象,必须采用 依赖注入的方式进行实例化 不能使用显式的构造方法 否则,将取不到值.解决方法如下: 删除显式的构造方法

  • Spring @value和@PropertySource注解使用方法解析

    这篇文章主要介绍了Spring @value和@PropertySource注解使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 @Value注解:可以使用注入基本字符串 EL表达式,从配置文件读取数据 @PropertySource用于引入单个配置文件 @PropertySources用于引入多个配置文件 @PropertySource或者@PropertySources引入的数据都是存在环境变量ConfigurableEnviro

  • spring中@value注解需要注意的问题

    首先,@value需要参数,这里参数可以是两种形式:@Value("#{configProperties['t1.msgname']}")或者@Value("${t1.msgname}"): 其次,下面我们来看看如何使用这两形式,在配置上有什么区别: 1. @Value("#{configProperties['t1.msgname']}")这种形式的配置中有"configProperties",其实它指定的是配置文件的加载对

  • Spring中利用配置文件和@value注入属性值代码详解

    1 简单属性值注入 package com.xy.test1; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service // 需要被注入属性值的类需要被Spring管理 public class PropertiesService1 { // 利用@Value注解,即使没有该属性或者属性文件也不会报错 // @Value输入

  • 基于Spring boot @Value 注解注入属性值的操作方法

    本文主要介绍Spring @Value 注解注入属性值的使用方法的分析,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的参考学习价值 在使用spring框架的项目中,@Value是经常使用的注解之一.其功能是将与配置文件中的键对应的值分配给其带注解的属性.在日常使用中,我们常用的功能相对简单.本文使您系统地了解@Value的用法. @Value注入形式 根据注入的内容来源,@ Value属性注入功能可以分为两种:通过配置文件进行属性注入和通过非配置文件进行属性注入. 非配置文件注

  • Spring boot工具类静态属性注入及多环境配置详解

    由于需要访问MongoDB,但是本地开发环境不能直接连接MongoDB,需要通过SecureCRT使用127.0.0.2本地IP代理.但是程序部署到线上生产环境后,是可以直接访问MongoDB的,因此开发好程序后,总是要修改一下MongoDB服务器的IP才能提交代码,这样很是不方便. private static final String PUBCHAT_HOST = "127.0.0.2"; // private static final String PUBCHAT_HOST =

  • 解决Spring Boot 多模块注入访问不到jar包中的Bean问题

    情景描述 一个聚合项目spring-security-tutorial,其中包括4个module,pom如下所示: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mav

  • 基于spring三方包类注入容器的四种方式小结

    如果引用第三方jar包,肯定是不能直接使用常用注解@Controller.@Service.@Repository.@Component将类的实例注入到spring容器中.以下四种方法可以向spring容器中导入三方包中类实例 . 1 xml配置 这种情况大家用的比较多,就是在spring的xml文件中配置需要导入的bean.在springweb项目工程web.xml中 ContextLoaderListener或者DispatcherServlet的初始参数contextConfigLocat

  • 详解Spring bean的注解注入之@Autowired的原理及使用

    一.@Autowired 概念: @Autowired 注释,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作. 通过 @Autowired的使用来消除 set ,get方法. 在使用@Autowired之前,我们对一个bean配置起属性时,用的是 <property name="属性名" value=" 属性值"/> 使用@Autowired之后,我们只需要在需要使用的地方使用一个@Autowired 就可以了. 代码使用: public

  • Spring Boot 条件注解详情

    目录 一 @Conditional扩展注解 1.1 Bean作为条件 1.1.1 @ConditionalOnBean 1.1.2 @ConditionalOnMissingBean 1.1.3 @ConditionalOnSingleCandidate 1.2 类作为条件 1.2.1 @ConditionalOnClass 1.2.2 @ConditionalOnMissingClass 1.3 SpEL表达式作为条件 1.4 JAVA版本作为判断条件 1.5 配置属性作为判断条件 1.6 资

  • 基于Spring Boot不同的环境使用不同的配置方法

    spring 多文件配置: 1.properties文件 2.YAML文件 一.properties文件 在 Spring Boot 中, 多环境配置的文件名需要满足 application-{profile}. properties的格式, 其中{profile}对应你的环境标识, 如下所示. • application-dev.properties: 开发环境. • application-test.properties: 测试环境. • application-prod.propertie

  • spring boot静态变量注入配置文件详解

    本文实例为大家分享了spring boot静态变量注入配置文件的具体代码,供大家参考,具体内容如下 spring 静态变量注入 spring 中不支持直接进行静态变量值的注入,我们看一下代码: @Component(value = "KafkaConfig") @ConfigurationProperties(prefix = "baseConfig") public class KafkaConfig { private static String logBrok

随机推荐