我有一个 Spring 组件,我在其中注入依赖项(其他组件),但我无法在构造函数中使用这些注入的依赖项,因为它们在构造函数调用时是
null
。有没有办法在构造函数中使用这些依赖项?
@Component
@RequestScope
public class MyComponent {
@Inject
OtherComponent1 otherComponent1
@Inject
OtherComponent2 otherComponent2
MyComponent() {
otherComponent1.someMethod(); // null
otherComponent2.someMethod(); // null
}
}
Spring中有两种注入方法:属性注入(如您所使用的)和构造函数注入。对于属性注入,Spring bean工厂将首先使用其默认构造函数(
MyComponent
)创建您的bean(这就是为什么您需要@Component
注释类的默认构造函数),然后Spring框架将注入OtherComponent1
和 OtherComponent2
完全构建后(注入所有依赖项)。因此,当调用 MyComponent()
时,属性 otherComponent1
和 otherComponent2
只是初始化为 null
的普通属性。要使用这些依赖项,您应该使用构造函数注入。
代码如下:
@Component
@RequestScope
public class MyComponent {
OtherComponent1 otherComponent1
OtherComponent2 otherComponent2
MyComponent(OtherComponent1 otherComponent1, OtherComponent2 otherComponent2) {
this.otherComponent1 = otherComponent1;
this.otherComponent2 = otherComponent2;
this.otherComponent1.someMethod(); // call methods ok
this.otherComponent2.someMethod(); // call methods ok
}
}