一、错误场景:spring
springboot项目中在.properties文件(.yml)文件中配置了属性值,在Bean中使用@Value注解引入该属性,Bean的构造器中使用该属性进行初始化,此时有可能会出现属性值为null,形成初始化程序的错误springboot
二、错误缘由:this
由于Bean的构造器调用是在@Value属性赋值以前进行的,因此形成了属性尚未赋值,就被调用的状况。spa
三、解决方案:code
将构造器中须要使用的@Value属性做为构造器的参数,确保构造器中使用该属性以前,属性已经获得初始化orm
理论先行,代码跟上(^_^)blog
(1).yml配置文件中配置系统参数值 file.upload-dirget
file:
upload-dir: /Users/lc/temp/
(2)FileStorageService 的构造器须要使用使用 file.upload-dir 属性io
@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,问题解决了。class