@Value注解使用过程中遇到的一些坑

笔者结合之前的一些经验教训,再结合一些资料总结了一下@Value注解使用过程中的一些注意事项。


以下所有的配置的前提是注解必须是放置于Spring组件中才能生效

一、@Value无法读取配置文件中的参数

这个坑是笔者前段时间自建springboot项目的时候发现的,当时笔者想在配置文件中加一些参数,然后使用这个注解直接调用,可是发现无路如何也获取不到这个参数(笔者用的是bootstrap.yml配置文件)。

原因:springboot项目是无法识别bootstrap文件的,springboot项目默认的配置文件是application.properties,所以如果将参数写入bootstrap配置文件,然后再用@Value注解,是无法读取参数的。

解决办法

  • 1、将参数写到application.properties配置文件中;
  • 2、添加下方的依赖,让springboot也能识别bootstrap.yml的配置文件;
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bootstrap</artifactId>
	<version>3.0.1</version>
</dependency>

二、@Value出现中文乱码

笔者也是在今天配置一个中文路径的时候发现的这个问题,当时报的异常是无法找到目标文件,仔细一检查才发现中文乱码的问题。

原因:用@Value注解读取application.properties文件时,编码默认是ISO-8859-1,所以直接配置中文一定会乱码。

解决办法:

  • 1、通过@PropertySource(value=“classpath:my.properties”, encoding=“UTF-8”)注解配置自定义配置文件,注意文件名不能是springboot默认的application.properties文件名称;
  • 2、使用yml/yaml格式的配置文件配置中文参数,springboot读该文件默认采用UTF-8编码。

三、@Value使用的一些小技巧

1、@Value注解可以解读字符串数组

只需要在配置文件中将两个字符串以逗号隔开,然后添加@Value注解的属性用字符串集合接收,就可以达到读取字符串数组的的目的。下面是示例代码:

Java中的接收属性

@Value("${muyichen.whitePaths}")
private List<String> whitePaths;

配置文件中的配置属性

muyichen.whitePaths=www.baidu.com,www.qq.com,www.muyichen.com

2、@Value注解可以直接注入对象

只需要在@Value属性中使用#{}就可以指定读取对象了,如下:

@Value("#{userService}")
private UserService userService;

注意:userService是对象注入到spring容器所使用的beanName,如果userService对应的类型并不是当前属性需要的类型的话,会抛异常

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缘丶沐逸尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值