gpt4 book ai didi

java - 如何使用 guice 在我的 Controller 中注入(inject)我的服务类?

转载 作者:行者123 更新时间:2023-12-02 01:21:19 25 4
gpt4 key购买 nike

我想将 DI 功能添加到旧代码库中,该代码库在 Controller 层中使用简单的服务实例化。

我尝试在 Controller 类中的 serviceInterface 字段之前使用 @Inject 。并使用 @ImplementedBy(ServiceInterfaceImpl) 注释我的 ServiceInterface。

我的代码如下所示: Controller 类

public class MyController {
@Inject
ServiceInterface serviceInterface;

InitContext(..){
// somecode
Toto toto = serviceInterface.getToto(); //I get an NPE here
// other code
}
}

服务接口(interface)代码:

@ImplementedBy(ServiceInterfaceImpl.class)
public interface ServiceInterface {
Toto getToto();
}

ServiceInterfaceImpl 代码:

@Singleton
public class ServiceInterfaceImpl implements ConventionServices {
Toto getToto(){
//somecode
}
}

我期望我的服务将被实例化,但我得到一个 NPE,表明我错过了一些东西,我尝试在我的服务构造函数之前添加 @Provides 但没有任何改变。

最佳答案

您应该在构造函数中注入(inject) ServiceInterface,而不是作为字段注入(inject)

您的问题是您有空值,因为字段注入(inject)发生在构造函数注入(inject)之后。因此,将注入(inject)移至构造函数而不是字段注入(inject):

public class MyController {
private final ServiceInterface serviceInterface;
@Inject MyController(ServiceInterface serviceInterface) {
this.serviceInterface = serviceInterface;
Toto toto = serviceInterface.getToto();
}
...
}

关于java - 如何使用 guice 在我的 Controller 中注入(inject)我的服务类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57627624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com