在子类构造函数中使用该字段时,Spring Abstract类@Autowire为null

时间:2016-10-03 04:27:44

标签: spring

以下是代码:

public abstract class A {
    @Autowired
    public Provider provider;
}

@Component
public class B extends A {
    B() {
        provider.get();
    }
}

Spring正在抛出NullPointerException,同时实例化B类Bean。

我知道在Abstract类中定义的@Autowired被注入,但不知道它们被注入的顺序。

之前我的理解是,在B的实例创建时,Spring会自动装配所有子类的字段,然后创建B的实例。 但是看起来,它在实例创建时忽略了子类概念,只是扫描B来识别@Autowire字段。

2 个答案:

答案 0 :(得分:1)

使用@PostConstruct。 Java Object Instantiation和Spring Dependency Injection是两种不同的流程。

@Component
public class B extends A {

    @PostConstruct
    void init() {
        provider.get();
    }
}

答案 1 :(得分:1)

如果您的构造函数自动装配是一个选项,则以下内容可能会有所帮助。

{{1}}

注意,自最新的Spring版本起,您不需要使用@Autowire注释构造函数。如果你做得对,spring框架会自动检测构造函数。