1、错误场景:
springboot项目中在.properties文件(.yml)文件中配置了属性值,在Bean中使用@Value注解引入该属性,Bean的构造器中使用该属性进行初始化,此时有可能会出现属性值为null,造成初始化程序的错误
2、错误原因:
因为Bean的构造器调用是在@Value属性赋值之前进行的,所以造成了属性还没有赋值,就被调用的情况。
3、解决方案:
将构造器中需要使用的@Value属性作为构造器的参数,确保构造器中使用该属性之前,属性已经得到初始化
理论先行,代码跟上(^_^)
(1).yml配置文件中配置系统参数值 file.upload-dir
file:
upload-dir: /Users/lc/temp/
(2)FileStorageService 的构造器需要使用使用 file.upload-dir 属性
@Service
public class FileStorageService {
/* @Value("${file.upload-dir}")
private String uploadDir; */
public FileStorageService(@Value("${file.upload-dir}") String uploadDir) throws ServiceException {
this.fileStorageLocation = Paths.get(uploadDir).toAbsolutePath().normalize();
try {
Files.createDirectories(this.fileStorageLocation);
} catch (Exception e) {
throw new Exception(e);
}
}
}
(3)now,问题解决了。