以下内容产生空错误(“ A”为空),但是我不确定为什么。是否在设置属性值之前实例化了bean?
package org.ets.readtogether.queuing;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("Abean")
public class Test {
@Value("${send.timeout.secs}")
public Integer A;
public int B = A * 1000;
}
答案 0 :(得分:1)
尝试一下:
@Component("Abean")
public class Test {
@Value("${send.timeout.secs}")
public Integer A;
public int B;
@PostConstruct
public void init() {
B = A * 1000;
}
}
好榜样here
答案 1 :(得分:1)
Spring在实例化对象后添加注入到对象中的所有依赖项。对象实例化在进行Spring进行的任何@Autowired
依赖项注入或@Value
值分配之前。
由于在对象实例化期间调用了语句public int B = A * 1000;
,因此即使在Spring具有注入依赖项的对象之前,类对象的实例化也会失败。
要在弹簧完成所有注入后后为变量B
赋值,请以@PostConstruct
方法或@AutoWired
执行操作构造函数。
public int B; // remove the assignment here.
@PostConstruct
public void postConstruct () {
this.B = A * 1000;
}
在实例化对象之后和Spring完成其工作之后,将调用上述方法。