How does spring dependency injection work?
我想知道何时将依赖项注入到SpringBean中。我有以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @Component public class TestClass { @Autowired Environment env; // throws Null Pointer Here. String prop = env.getProperty("some.property"); public void test() { // works here String prop = env.getProperty("some.property"); } } |
当我试图获取环境变量时,为什么Spring会抛出NPE。当调用类构造函数时会发生什么?Spring是否只在构建时在上下文中查找bean的可用性,而不在此时何地注入它?请解释一下bean创建的完整流程。依赖项是否只有在对象被构造并添加到上下文之后才被注入?Spring是只在创建类的实例之后才查找依赖项,还是在调用构造函数时查找依赖项?
我建议你自己阅读关于bean生命周期的文章。网上有很多不错的图表,但是……我来帮你处理这个NPE。您要做的是在注入完成之前设置属性。Spring首先对对象进行实例化,然后填充字段,然后进行注入。所以…在初始化env字段之前,您的代码首先创建字段(并尝试使用env字段设置它们)。方法test()是在类对象完全创建之后调用的,因此env字段已经正确准备好使用。
希望有帮助。