@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对应的类型并不是当前属性需要的类型的话,会抛异常

猜你喜欢

转载自blog.csdn.net/qq_42697271/article/details/116460780