以下是代码:
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
字段。
答案 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框架会自动检测构造函数。