千家信息网

SpringBoot中Spring@Value属性注入使用详解是怎样的

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,SpringBoot中Spring@Value属性注入使用详解是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在使用Sprin
千家信息网最后更新 2025年02月08日SpringBoot中Spring@Value属性注入使用详解是怎样的

SpringBoot中Spring@Value属性注入使用详解是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在使用Spring框架的项目中,@Value是使用比较频繁的注解之一,它的作用是将配置文件中key对应的值赋值给它标注的属性。

@Value注入支持形式

@Value属性注入功能根据注入的内容来源可分为两类:通过配置文件的属性注入和通过非配置文件的属性注入。

通过配置文件的注入根据配置文件的来源又可分为两类:一类为默认的Spring Boot会自动加载的配置文件application.properties中的属性;另一类为自定义配置文件中的属性,需要先通过@PropertySource加载。

而非配置文件注入的类型又分为:

  • 注入普通字符串

  • 注入操作系统属性

  • 注入表达式结果

  • 注入其他Bean属性

  • 注入文件资源

  • 注入URL资源

基于配置文件注入

首先来看数据来源自配置文件的注入,无论是会被默认加载的application.properties或自定义的my.properties文件。比如,application.properties中定义属性值的形式如下:

user.name=admin

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

user.password=pwd123

那么,@Value在Bean中的使用形式为:

@PropertySource("classpath:my.properties")@RestControllerpublic class ValueController {        /**         * 获取位于application.properties中配置的属性         */        @Value("${user.name}")        private String name;        /**         * 获取位于my.properties中的配置属性         */        @Value("${user.password}")        private String password;}

不同的是,在Spring Boot项目中,如果是自定义的my.properties文件,需要在某个类中通过@PropertySource引入该配置文件,而application.properties中的属性会自动被加载。

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

tools=car,train,airplane

可以通过以下方式注入:

/** * 注入数组(自动根据","分割) */@Value("${tools}")private String[] toolArray;/** * 注入列表形式(自动根据","分割) */@Value("${tools}")private List toolList;

Spring默认情况下会以","进行分割,转换成对应的数组或列表。

基于非配置文件注入

在使用实例说明基于非配置文件注入属性的实例之前,我们先了解一下SpEL。

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;/** * 注入列表形式(自动根据"|"分割) */@Value("#{'${words}'.split('\\|')}")private List numList;/** * 注入文件资源 */@Value("classpath:config.xml")private Resource resourceFile;/** * 注入URL资源 */@Value("http://www.choupangxia.com")private URL homePage;

在上述示例分别展示了以下场景的使用:

  • 直接注入字符串,相当于实例化时直接初始化字符串。

  • 通过#{}注入系统属性。

  • 通过#{}注入表达式结果。

  • 通过#{}注入其他Bean的属性。

  • 通过#{}和${}的组合注入属性并进行分割处理。

  • 注入文件资源,将对应的字符串值转换成对应的资源文件。

  • 注入URL资源,将对应的URL字符串转换成URL。

其中需要注意的是:

  • Resource的全限定名为org.springframework.core.io.Resource。

  • 二者结合使用时(#{'${}'}),注意单引号,注意不能反过来。

默认值注入

无论使用#{}或${}进行属性的注入,当无法获取对应值时需要设置默认值,可以采用如下方式来进行设置。

/** * 如果属性中未配置ip,则使用默认值 */@Value("${ip:127.0.0.1}")private String ip;/** * 如果系统属性中未获取到port的值,则使用8888。 */@Value("#{systemProperties['port']?:'8888'}")private String port;

其中${}中直接使用":"对未定义或为空的值进行默认值设置,而#{}则需要使用"?:"对未设置的属性进行默认值设置。

关于SpringBoot中Spring@Value属性注入使用详解是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

属性 文件 配置 字符 资源 字符串 形式 实例 系统 表达式 数组 来源 结果 问题 普通 操作系统 内容 可以通过 场景 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 人人通互联网科技有限公司 网络安全法技术措施有哪些 软件封装数据库 怎么建设邮箱服务器 广州大学网络安全学院刘祥涛 电脑怎么启动软件服务器 书生之路模组服务器选什么 如何重设网络安全密 渭南网络安全宣传周 来安工业软件开发技术销售厂 北京百度网络技术有限公司 淮安海航软件开发经验丰富 免费的开源大数据库 联网电视为什么连接不上服务器 中国软件开发产业市场规模 我的世界行尸走肉服务器如何玩 怎么用dbchart显示数据库 中转服务器上传文件 中国互联网金融科技 江西网络时间同步服务器 苹果储存空间连接服务器 剑灵2手游服务器选择 网络安全主要保障内容 山西潮流软件开发服务 通信网络技术实训评语 防治技术数据库 switch网络安全选什么 应用软件开发招聘 同有 人脸识别软件开发创新项目总结 dsp软件开发 定制
0