Springboot中@Value注解的场景用法及可能遇到的问题详解

 更新时间:2023年11月10日 08:30:47   作者:NJUPT_zhaoyp  
这篇文章主要给大家介绍了关于Springboot中@Value注解的场景用法及可能遇到问题的相关资料, @Value通常用于注入外部化属性,即外部配置属性的注入,文中通过图文介绍的非常详细,需要的朋友可以参考下

前言

@Value注解可以通过#{}和${}等2中方式使用,其作用通常如下:

@Value(“#{}”) 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以直接表示常量。

用@Value(“${}”)注解一般从配置文件读取属性。

1 非配置文件注入

1.1 用法

通过@Value将外部的值动态注入到Bean中,常见用法如下:

  • 注入普通字符串
  • 注入操作系统属性
  • 注入表达式结果
  • 注入其他Bean属性
  • 注入beanInject对象的属性another
  • 注入文件资源
  • 注入URL资源

非配置文件注入在实际开发场景中使用的较少,@value大部分情况注入配置文件中的属性

1.2 示例

注入普通字符串

直接附在属性名上,在 Bean 初始化时,会赋初始值。

@Value("admin")
private String name;

注入系统属性

@Value("#{systemProperties['os.name']}")
private String osName;

注入其他bean的属性

注入User对象中的属性userName

@Value("#{User.userName}")
private String userName;

注入文件资源

@Value("classpath:com/ndtest/spring/configinject/config.txt")
private Resource resourceFile;

注入URL资源

@Value("http://www.baidu.com")
private Resource testUrl;

2 配置文件注入(重点)

SpringBoot 通过 @Value 注解将配置文件中的属性注入到容器内组件中(可用在 @Controller 、@Service 、@Configuration、@Component 等Spring托管的类中)

1.注入普通字符串

在 application.properties 配置文件中有如下配置:

userName=zhaoyp

我们可以使用@Value注解注入属性:

@Value("${userName}")
public String userName;

2.注入基本类型(最常使用)

这次我们使用yml文件作为配置文件,假设application.yml文件中定义了服务器的基本配置

client:
  ipAddr: 222.95.84.124
  sshPort: 22
  sshUser: root
  sshPass: Test!@#123

我们可以通过@Value注解注入属性

    @Value("${client.ipAddr}")
    private String ipAddr;

    @Value("${client.sshPort}")
    private Integer sshPort;

    @Value("${client.sshUser}")
    private String sshUser;

    @Value("${client.sshPass}")
    private String sshPass;

3.注入数组、List类型

假设配置文件如下:

ids=1,2,3
// 注入数组类型
@Value("${ids}")
public int[] arrIds;

// 注入List
@Value("#{'${ids}'.split(',')}")
public List<String> listIds;

3 @Value注解获取不到值的常见问题

1 使用static或者final修饰了tagValue

错误示范如下:

@Value("${ftpIP}")
private static String ftpIP; 

@Value("${ftpUserName}")
private final String ftpUserName;

解决办法是移除static或final关键字。 

2 使用该注解的类上面没有加注解

没有加注解即不能被spring管理(类没有加上@Component(或者@service等))

错误示范如下:

public class FTPManagerService { 
 @Value("${ftpIP}")
 private static String ftpIP; 
}

正确案例:

@Component // 检查注解是否遗漏
public class FTPManagerService { 
 @Value("${ftpIP}")
 private static String ftpIP; 
}

3 使用new关键字新建了实例,而没有使用@Autowired

错误用法以及正确案例如下 

public class FTPManagerService { 
 @Value("${ftpIP}")
 private static String ftpIP; 
} 

public class Test{
    /*错误用法*/
    FTPManagerService  f = new FTPManagerService ();
 
    /*正确用法*/
    @Autowired
    FTPManagerService  f2;
}

以上便是@Value注解的使用方法以及踩坑案例,希望能帮到大家~

总结

到此这篇关于Springboot中@Value注解的场景用法及可能遇到的问题的文章就介绍到这了,更多相关Springboot @Value注解场景用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Java+MySQL实现附近功能实例

    利用Java+MySQL实现附近功能实例

    现在很多手机软件都用附近搜索功能,但具体是怎么实现的呢?下面这篇文章就来给大家介绍关于利用Java+MySQL实现附近功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • 关于Feign调用服务Headers传参问题

    关于Feign调用服务Headers传参问题

    这篇文章主要介绍了关于Feign调用服务Headers传参问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java 字符串相减(很简单的一个方法)

    java 字符串相减(很简单的一个方法)

    本篇文章是对java中关于字符串相减的一个简单的方法进行了介绍,需要的朋友参考下
    2013-07-07
  • java 11新特性HttpClient主要组件及发送请求示例详解

    java 11新特性HttpClient主要组件及发送请求示例详解

    这篇文章主要为大家介绍了java 11新特性HttpClient主要组件及发送请求示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成方法

    SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成方法

    这篇文章主要介绍了SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成,下面以连接mysql数据库并生成html格式的数据库结构文档为例,插件的使用方式除可以使用代码外,还可以使用Maven插件的方式,需要的朋友可以参考下
    2024-07-07
  • SpringBoot整合第三方技术的实现

    SpringBoot整合第三方技术的实现

    本文主要介绍了SpringBoot整合第三方技术的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Java实现扑克牌的创建以及发放

    Java实现扑克牌的创建以及发放

    在java当中生成一副牌有很多种方法,有简单易于理解的面向过程编程,也有面向对象模块化编程,下面这篇文章主要给大家介绍了关于Java实现扑克牌的创建以及发放的相关资料,需要的朋友可以参考下
    2023-03-03
  • springboot 通过博途获取plc点位的数据代码实现

    springboot 通过博途获取plc点位的数据代码实现

    这篇文章主要介绍了springboot 通过博途获取plc点位的数据的代码实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java正则表达式验证固定电话号码符合性

    Java正则表达式验证固定电话号码符合性

    这篇文章主要介绍了Java正则表达式验证固定电话号码符合性的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Spring Cloud Feign实现动态URL

    Spring Cloud Feign实现动态URL

    本文主要介绍了Spring Cloud Feign实现动态URL,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论