本文主要介绍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;

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

  1. 直接注入字符串等效于实例化时直接初始化字符串。初始化空串
  2. 通过#{}注入系统变量。
  3. 表达式计算结果通过#{}注入。
  4. 通过#{}注入其他bean的属性。
  5. 通过{}和$ {}的组合注入属性,然后拆分。
  6. 注入文件资源,并将相应的字符串值转换为相应的资源文件。
  7. 注入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的更多相关文章

  1. Spring的配置文件ApplicationContext.xml配置头文件解析

    Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applica ...

  2. 基于配置文件的方式配置AOP

    之前说的都是通过注释的方式配置,接下来说说如何使用配置文件配置AOP 还是原来的代码,去掉所有注释,接下来配置最基本的几个bean. 然后使用<aop:config>标签进行配置,然后配切 ...

  3. spring-AOP框架(基于配置文件的方式配置AOP)

    .xml: ref-指向,order-指定优先级

  4. 22Spring基于配置文件的方式配置AOP

    直接看代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interface ArithmeticCalculator { int add(in ...

  5. Spring_基于配置文件的方式配置AOP

    applicationContext-xml.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...

  6. 项目引入非配置的文件,打成war包后测试报错的可能原因

    写在前边 这阵子有点忙,开发一个微服务项目中读取配置文件的时候在本地测试是可以的,但是一到测试环境就报错,经查看发现是因为发布的时候是用的war包,使用java -jar xxx.war启动的,所以用 ...

  7. Winform中自定义xml配置文件,并配置获取文件路径

    场景 在Winform程序中,需要将一些配置项存到配置文件中,这时就需要自定义xml的配置文件格式.并在一些工具类中去获取配置文件的路径并加载其内容. 关注公众号霸道的程序猿获取编程相关电子书.教程推 ...

  8. Spring Boot 配置文件中的花样,看这一篇足矣!

    在快速入门一节中,我们轻松的实现了一个简单的RESTful API应用,体验了一下Spring Boot给我们带来的诸多优点,我们用非常少的代码量就成功的实现了一个Web应用,这是传统的Spring应 ...

  9. Spring Boot 配置文件中的花样

    原文:https://www.cnblogs.com/didispace/p/11002732.html 在快速入门一节中,我们轻松的实现了一个简单的RESTful API应用,体验了一下Spring ...

随机推荐

  1. 滴滴数据驱动利器:AB实验之分组提效

    桔妹导读:在各大互联网公司都提倡数据驱动的今天,AB实验是我们进行决策分析的一个重要利器.一次实验过程会包含多个环节,今天主要给大家分享滴滴实验平台在分组环节推出的一种提升分组均匀性的新方法.本文首先 ...

  2. 开发者大赛 | aelf轻型DApp开发训练大赛结果公布!

    6月9日,由aelf基金会发起的轻型DApp开发训练大赛圆满收官.本次训练赛基于aelf公开测试网展开,主要针对轻型DApp,旨在激励更多的开发者参与到aelf生态中来. 活动于4月21日上线后,ae ...

  3. [原创][开源]SunnyUI.Net, C# .Net WinForm开源控件库、工具类库、扩展类库、多页面开发框架

    SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...

  4. [CQOI2007]矩形

    题目   点这里看题目. 分析   插头 DP ,考虑枚举一下两块之间的分割线,本质上就是两个端点都在边界上的路径.    DP 过程中,我们将没有端点在边界上面的路径称为 1 路径,反之叫 2 路径 ...

  5. nginx介绍及其原理

    nginx介绍及其原理 nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行. nginx由俄罗斯程序设计师lgor Sy ...

  6. controlfile的情景恢复

    控制文件测试 百度百科:控制文件(Control File)是Oracle的物理文件之一,它记录了数据库的名字.数据文件的位置等信息.控制文件的重要性在于,一旦控制文件损坏,数据库将会宕机.如果没有数 ...

  7. [置顶] linux中fork()函数详解(原创!!实例讲解)

    分类: 计算机系统 linux2010-06-01 23:35 60721人阅读 评论(105) 收藏 举报 linux2010存储  一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源 ...

  8. VNC连接cnetos图形化界面

    VNC连接cnetos图形化界面 Linux系统在服务器上一般都直接最小化安装,是不安装图形界面的,但是有时候,有一些特殊情况,需要使用图形界面,而下面就利用VNC来实现类似windows的远程桌面功 ...

  9. 前台页面id为空--驼峰命名映射

    错误: 前台页面id为空,或其他数据映射问题(方案2) 原因: java的bean类属性和数据库字段命名不一致,查询的时候就不能把数据封装进bean类里,  在数据库字段命名规范中,通常使用下划线“_ ...

  10. docker 镜像删除

    (我们以删除 php-fpm 这个镜像为例子) 一.查看镜像的 ID [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED ...