@inject 在注入对象时似乎不工作 NPE
@inject doesn't seem to work NPE when injecting an object
我一直在为这个问题苦苦挣扎一段时间,所以我来这里与大家分享。
首先,我有一个 class,我想在其中注入一个对象:
public class MyClass {
@javax.inject.Inject
private MyInterface interface
/.../
public void myMethod(){
interface.doTask();
}
我的界面:
public interface MyInterface {
public abstract void doTask() throws Exception;
}
是我绑定到其实现的接口:
public class MyInterfaceImpl implements MyInterface{
@Inject
public MyInterfaceImpl(...) {
/.../
}
@Override
public void doTask() throws Exception{
/.../
}
在配置中:
public class ApplicationConfig extends ResourceConfig {
private Config config = new Config();
public ApplicationConfig() {
super();
register(new MainBinder());
}
private class MainBinder extends AbstractBinder {
@Override
protected void configure() {
bind(MyInterfaceImpl.class).to(MyInterface.class).in(Singleton.class);
}
}
}
所以,当我 运行 应用程序并尝试执行方法时,我有一个 NPE:
interface.doTask();
Voilà,我很抱歉这么问,但我需要一些帮助,而且我尽量做到通用,希望它不会影响你的理解。
编辑:
忘了提到 class MyClass() 在另一个 class 中被调用是这样的:new MyClass()
所以我认为问题可能出在这里。
所以我想通了!
我正在创建一个新的 myClass 实例 => new MyClass()
因此注入无法工作!
所以我注入了 MyClass() 而不是创建新实例并将其绑定在 ApplicationConfig 中。
这很好用。
我一直在为这个问题苦苦挣扎一段时间,所以我来这里与大家分享。 首先,我有一个 class,我想在其中注入一个对象:
public class MyClass {
@javax.inject.Inject
private MyInterface interface
/.../
public void myMethod(){
interface.doTask();
}
我的界面:
public interface MyInterface {
public abstract void doTask() throws Exception;
}
是我绑定到其实现的接口:
public class MyInterfaceImpl implements MyInterface{
@Inject
public MyInterfaceImpl(...) {
/.../
}
@Override
public void doTask() throws Exception{
/.../
}
在配置中:
public class ApplicationConfig extends ResourceConfig {
private Config config = new Config();
public ApplicationConfig() {
super();
register(new MainBinder());
}
private class MainBinder extends AbstractBinder {
@Override
protected void configure() {
bind(MyInterfaceImpl.class).to(MyInterface.class).in(Singleton.class);
}
}
}
所以,当我 运行 应用程序并尝试执行方法时,我有一个 NPE:
interface.doTask();
Voilà,我很抱歉这么问,但我需要一些帮助,而且我尽量做到通用,希望它不会影响你的理解。
编辑:
忘了提到 class MyClass() 在另一个 class 中被调用是这样的:new MyClass()
所以我认为问题可能出在这里。
所以我想通了!
我正在创建一个新的 myClass 实例 => new MyClass()
因此注入无法工作!
所以我注入了 MyClass() 而不是创建新实例并将其绑定在 ApplicationConfig 中。
这很好用。