2

Я уже некоторое время борюсь с этим вопросом, поэтому я пришел сюда, чтобы поделиться им с вами. Во-первых у меня есть класс, в которым я хочу, чтобы впрыснуть объекта:@ inject не работает NPE

public class MyClass { 
@javax.inject.Inject 
private MyInterface interface 
     /.../ 
public void myMethod(){ 
interface.doTask(); 
} 

MyInterface:

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(); 

Вуаля, я извиняюсь спросить, но мне нужна помощь по этому поводу, и я пытался быть как можно более общий, надеясь, что это не повлияет на ваше понимание. Спасибо заранее!

Edit: Забыл упомянуть, что класс MyClass() вызывается в другом классе, как это: new MyClass()

Так что я думаю, что проблема может быть там.

+0

Что такое реализация ResourceConfig здесь? Это в Джерси? – jwells131313

+0

Привет, да, это в Джерси. – hhelbawi

ответ

2

Итак, я понял это! Я создавал новый экземпляр myClass =>new MyClass(), поэтому инъекция не могла работать! Поэтому я ввел MyClass() вместо создания нового экземпляра и связал его в ApplicationConfig. Это работало нормально.

Смежные вопросы