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