春天依赖注入如何工作?

时间:2018-06-27 09:56:02

标签: java spring

我想知道何时将依赖项注入到Spring bean中。 我有以下代码:

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");
    }
}

当我尝试获取Environment变量时,为什么Spring会抛出NPE。 调用类构造函数时会发生什么? spring是否仅在构建时在上下文中寻找bean的可用性,而不是在那时和那里注入它?请解释完整的Bean创建流程。是否仅在构造对象并将其添加到上下文之后才注入依赖项? Spring是否仅在创建类实例之后才查找依赖项,还是在调用构造函数时会查找依赖项?

1 个答案:

答案 0 :(得分:1)

我建议您自己阅读有关bean生命周期的信息。互联网上有很多漂亮的图表,但是.. 让我帮助您解决这个NPE。 您想要做的是在注入完成之前设置属性。 Spring首先创建对象实例,然后填充字段,然后进行注入。所以...您的代码首先在初始化环境字段之前创建字段(并尝试使用环境字段设置它们)。 在完全创建类对象之后调用方法test(),因此已经正确准备了env字段以供使用。

我希望有帮助。