今天在做项目的时候,发现明明给一个字段标注了@Value 并成功读取到了 application.properties 中属性值
但是在调用构造函数的时候 缺报了空指针异常,构造函数中需要的一个值没有传入。
后来经过查找资料,发现 spring的属性注入有两种方法:
1. 属性注入:通过无参构造函数+setter方法注入
2. 构造注入:通过有参的构造函数注入。
属性注入是 spring调用了类的无参构造函数创建一个对象,然后利用setter方法赋值。
这种情况下,构造函数先于属性注入,如果在构造函数中对属性的值进行了判断,就会报空指针异常!
构造注入是通过有参的构造函数注入,如果需要在构造对象的时候便对成员赋值,推荐采用此种方法。
构造函数的参数上使用@Value进行注入
public XXXDao(@Value("${mongodb.host}") String mongoHost{
xxxxxxxxxxx;
}
资料来源自https://blog.csdn.net/achang07/article/details/79419006?utm_source=blogxgwz7,侵删。