Я пытаюсь реализовать простейшую из возможных Java-программ, в которой объект @Singleton
вводится через @Inject
.Однако после @Inject
объект всегда null
.
Я понял, что мне нужно использовать Guice для привязки определенного поведения.Я делаю это через MyGuiceModule
, что extends AbstractModule
.Однако MyGuiceModule
никогда не вызывали, поэтому мне пришлось добавить эту строку:
Injector injector = Guice.createInjector(new MyGuiceModule());
Но это не работает.Вот мои файлы:
LonelyObject
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton
public class LonelyObject {
public LonelyObject() {
System.out.println("LonelyObject Constructor");
}
public void alive() {
System.out.println("I AM ALIVE");
}
}
TheTest
public class TheTest {
// inject LonelyObject here
@Inject
LonelyObject L;
public TheTest() {
}
// use LonelyObject
public void doit() {
L.alive();
}
}
MyGuiceModule
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import javax.inject.Inject;
public class MyGuiceModule extends AbstractModule {
@Override
protected void configure() {
System.out.println("MyGuiceModule extends AbstractModule");
// make sure LonelyObject is always instantiated as a singleton
bind(LonelyObject.class).asEagerSingleton();
}
}
основная функция
public static void main(String[] args) {
System.out.println("main");
// this is only here so MyGuiceModule gets called, otherwise
// it will be ignored. this seems to be the only way I can see
// to configure Guice. note that the returned Injector is not used.
Injector injector = Guice.createInjector(new MyGuiceModule());
TheTest t = new TheTest();
// crashes here with Exception in thread "main" java.lang.NullPointerException
t.doit();
}