结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot
本文主要介绍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;
$ {}中直接使用“:”来设置未定义或空值的默认值,而#{}则需要使用“?:”来设置未设置属性的默认值。
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端分离RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》
结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot的更多相关文章
- Spring的配置文件ApplicationContext.xml配置头文件解析
Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applica ...
- 基于配置文件的方式配置AOP
之前说的都是通过注释的方式配置,接下来说说如何使用配置文件配置AOP 还是原来的代码,去掉所有注释,接下来配置最基本的几个bean. 然后使用<aop:config>标签进行配置,然后配切 ...
- spring-AOP框架(基于配置文件的方式配置AOP)
.xml: ref-指向,order-指定优先级
- 22Spring基于配置文件的方式配置AOP
直接看代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interface ArithmeticCalculator { int add(in ...
- Spring_基于配置文件的方式配置AOP
applicationContext-xml.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...
- 项目引入非配置的文件,打成war包后测试报错的可能原因
写在前边 这阵子有点忙,开发一个微服务项目中读取配置文件的时候在本地测试是可以的,但是一到测试环境就报错,经查看发现是因为发布的时候是用的war包,使用java -jar xxx.war启动的,所以用 ...
- Winform中自定义xml配置文件,并配置获取文件路径
场景 在Winform程序中,需要将一些配置项存到配置文件中,这时就需要自定义xml的配置文件格式.并在一些工具类中去获取配置文件的路径并加载其内容. 关注公众号霸道的程序猿获取编程相关电子书.教程推 ...
- Spring Boot 配置文件中的花样,看这一篇足矣!
在快速入门一节中,我们轻松的实现了一个简单的RESTful API应用,体验了一下Spring Boot给我们带来的诸多优点,我们用非常少的代码量就成功的实现了一个Web应用,这是传统的Spring应 ...
- Spring Boot 配置文件中的花样
原文:https://www.cnblogs.com/didispace/p/11002732.html 在快速入门一节中,我们轻松的实现了一个简单的RESTful API应用,体验了一下Spring ...
随机推荐
- k8s学习-安全
4.8.安全 4.8.1.概念 一些内容可参考4.6.2.Secret的内容 说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务.API Server 是集群 ...
- Spring AOP学习笔记02:如何开启AOP
上文简要总结了一些AOP的基本概念,并在此基础上叙述了Spring AOP的基本原理,并且辅以一个简单例子帮助理解.从本文开始,我们要开始深入到源码层面来一探Spring AOP魔法的原理了. 要使用 ...
- Redis的内存和实现机制
1. Reids内存的划分 数据 内存统计在used_memory中 进程本身运行需要内存 Redis主进程本身运行需要的内存占用,代码.常量池等 缓冲内存,客户端缓冲区.复制积压缓冲区.AOF缓冲区 ...
- 小师妹学JavaIO之:NIO中那些奇怪的Buffer
目录 简介 Buffer的分类 Big Endian 和 Little Endian aligned内存对齐 总结 简介 妖魔鬼怪快快显形,今天F师兄帮助小师妹来斩妖除魔啦,什么BufferB,Buf ...
- mysql内连接
inner join(等值连接) 只返回两个表中联结字段相等的行 select * from role_action ra INNER JOIN action a on ra.action_id = ...
- JDBC——使用JDBC连接MySQL数据库
在JDBC--什么是JDBC一文中我们已经介绍了JDBC的基本原理. 这篇文章我们聊聊如何使用JDBC连接MySQL数据库. 一.基本操作 首先我们需要一个数据库和一张表: CREATE DATABA ...
- linux环境下搭建Jenkins持续集成(Jenkins+git+shell+maven+tomact)
准备环境 jenkins.war包 ,jdk1.8 ,tomact , maven,git 1.Jenkins war包,下载地址https://jenkins.io/zh/download/ ...
- 这一次搞懂Spring Web零xml配置原理以及父子容器关系
前言 在使用Spring和SpringMVC的老版本进行开发时,我们需要配置很多的xml文件,非常的繁琐,总是让用户自行选择配置也是非常不好的.基于约定大于配置的规定,Spring提供了很多注解帮助我 ...
- idea安装docker插件
Preferences->Plugins 根据上图安装docker插件,安装完成后可使用idea来管理docker项目了.docker运行项目请参加"Docker开发环境搭建" ...
- 如何修改git commit的author信息
本地有多个git账号时,容易发生忘记设置项目默认账号,最后以全局账号提交的情况,其实对代码本身并无影响,只是提交记录里显示的是别的名字稍显别扭. 举个例子: 查看提交日志,假设以a(a@email. ...