如何使用 guice 在我的控制器中注入我的服务 class?
How to inject my service class in my controller using guice?
我想将 DI 功能添加到在控制器层使用简单服务实例化的旧代码库。
我尝试在控制器 class 中的 serviceInterface
字段之前使用 @Inject
。并用 @ImplementedBy(ServiceInterfaceImpl)
.
注释我的 ServiceInterface
我的代码如下所示:
控制器 class
public class MyController {
@Inject
ServiceInterface serviceInterface;
InitContext(..){
// somecode
Toto toto = serviceInterface.getToto(); //I get an NPE here
// other code
}
}
服务接口代码:
@ImplementedBy(ServiceInterfaceImpl.class)
public interface ServiceInterface {
Toto getToto();
}
ServiceInterfaceImpl 代码:
@Singleton
public class ServiceInterfaceImpl implements ConventionServices {
Toto getToto(){
//somecode
}
}
我希望我的服务会被实例化,但我得到一个 NPE,表明我错过了一些东西,我尝试在我的服务构造函数之前添加 @Provides
但没有任何改变。
您应该在构造函数中注入 ServiceInterface
,而不是作为字段注入
你的问题是你有空值,因为字段注入发生在构造函数注入之后。所以将你的注入移动到构造函数而不是字段注入:
public class MyController {
private final ServiceInterface serviceInterface;
@Inject MyController(ServiceInterface serviceInterface) {
this.serviceInterface = serviceInterface;
Toto toto = serviceInterface.getToto();
}
...
}
我想将 DI 功能添加到在控制器层使用简单服务实例化的旧代码库。
我尝试在控制器 class 中的 serviceInterface
字段之前使用 @Inject
。并用 @ImplementedBy(ServiceInterfaceImpl)
.
我的代码如下所示: 控制器 class
public class MyController {
@Inject
ServiceInterface serviceInterface;
InitContext(..){
// somecode
Toto toto = serviceInterface.getToto(); //I get an NPE here
// other code
}
}
服务接口代码:
@ImplementedBy(ServiceInterfaceImpl.class)
public interface ServiceInterface {
Toto getToto();
}
ServiceInterfaceImpl 代码:
@Singleton
public class ServiceInterfaceImpl implements ConventionServices {
Toto getToto(){
//somecode
}
}
我希望我的服务会被实例化,但我得到一个 NPE,表明我错过了一些东西,我尝试在我的服务构造函数之前添加 @Provides
但没有任何改变。
您应该在构造函数中注入 ServiceInterface
,而不是作为字段注入
你的问题是你有空值,因为字段注入发生在构造函数注入之后。所以将你的注入移动到构造函数而不是字段注入:
public class MyController {
private final ServiceInterface serviceInterface;
@Inject MyController(ServiceInterface serviceInterface) {
this.serviceInterface = serviceInterface;
Toto toto = serviceInterface.getToto();
}
...
}