如何在构造函数中使用注入的依赖项?

问题描述 投票:0回答:1

我有一个 Spring 组件,我在其中注入依赖项(其他组件),但我无法在构造函数中使用这些注入的依赖项,因为它们在构造函数调用时是

null
。有没有办法在构造函数中使用这些依赖项?

@Component
@RequestScope
public class MyComponent {

    @Inject
    OtherComponent1 otherComponent1

    @Inject
    OtherComponent2 otherComponent2

    MyComponent() {
        otherComponent1.someMethod(); // null
        otherComponent2.someMethod(); // null
    }
}
spring spring-boot spring-mvc
1个回答
0
投票

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
    }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.