@Service
public class SomeService {
@Value("${a}")
String a;
@Value("$加派")
String b;
private C c = new C(a, b);
}
上面的代碼有什么問題嗎沈撞?有!
這個時候new C(a, b)里面的a和b并不是上面被@Value注入的值耗跛,而是null裕照。這是為什么呢?
首先我們看一下Spring在初始化Bean的過程:
spring_context_callback.png
解釋一下:
- 讀取定義
- Bean Factory Post Processing
- 實例化
- 屬性注入
- Bean Post Processing
這個問題的原因就很明顯了调塌。@Value注入是在第四步牍氛,而初始化變量是在第三部,這個使用變量還沒有被注入烟阐,自然為null了搬俊。
解決的方法也很簡單,把需要初始化的變量放到第四步去實例化就可以了蜒茄。下面給出一個解決方法:
@Service
public class SomeService {
private C c
@Autowired
public void setC(@Value("${a}") String a,
@Value("$唉擂") String b) {
c = new C(a, b);
}
}