首页 > 解决方案 > 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");
    }
}

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

标签: javaspring

解决方案


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

我希望这会有所帮助。


推荐阅读