Java Guice依赖项注入器空指针异常

Java Guice依赖项注入器空指针异常,java,guice,Java,Guice,我在java中使用了以下代码。我不知道我在这里做错了什么 我的主要文件是:查看并检查 package com.sample.test; import com.google.inject.Guice; import com.google.inject.Injector; public class mymain { public static void main(String[] args) { Injector injector = Guice.createInjecto

我在java中使用了以下代码。我不知道我在这里做错了什么

我的主要文件是:查看并检查

package com.sample.test;    
import com.google.inject.Guice;
import com.google.inject.Injector;

public class mymain {    
public static void main(String[] args) {    
Injector injector = Guice.createInjector(new AppInjectory());
ApplicationExample obj =                               injector.getInstance(ApplicationExample.class);
obj.sendMessage();    
}    
}
package com.sample.test;    
public interface MessageService {
boolean sendMessage(String msg, String receipient);
}
package com.sample.test;
import com.google.inject.AbstractModule;    
public class AppInjectory extends AbstractModule {    
@Override
protected void configure() {     
bind(MessageService.class).to(EmailService.class);    
}    
}
package com.sample.test;
import javax.inject.Inject;    
    public class ApplicationExample {        
    private MessageService service;        
    @Inject
    public void setService(MessageService svc){
    this.service=svc;
    }        
    public void sendMessage() {
    System.out.println(“I am here”);
    service.sendMessage(“welcome”, “java”);        
    }
    }
我的界面是:查看并检查

package com.sample.test;    
import com.google.inject.Guice;
import com.google.inject.Injector;

public class mymain {    
public static void main(String[] args) {    
Injector injector = Guice.createInjector(new AppInjectory());
ApplicationExample obj =                               injector.getInstance(ApplicationExample.class);
obj.sendMessage();    
}    
}
package com.sample.test;    
public interface MessageService {
boolean sendMessage(String msg, String receipient);
}
package com.sample.test;
import com.google.inject.AbstractModule;    
public class AppInjectory extends AbstractModule {    
@Override
protected void configure() {     
bind(MessageService.class).to(EmailService.class);    
}    
}
package com.sample.test;
import javax.inject.Inject;    
    public class ApplicationExample {        
    private MessageService service;        
    @Inject
    public void setService(MessageService svc){
    this.service=svc;
    }        
    public void sendMessage() {
    System.out.println(“I am here”);
    service.sendMessage(“welcome”, “java”);        
    }
    }
我的配置文件是look and check

package com.sample.test;    
import com.google.inject.Guice;
import com.google.inject.Injector;

public class mymain {    
public static void main(String[] args) {    
Injector injector = Guice.createInjector(new AppInjectory());
ApplicationExample obj =                               injector.getInstance(ApplicationExample.class);
obj.sendMessage();    
}    
}
package com.sample.test;    
public interface MessageService {
boolean sendMessage(String msg, String receipient);
}
package com.sample.test;
import com.google.inject.AbstractModule;    
public class AppInjectory extends AbstractModule {    
@Override
protected void configure() {     
bind(MessageService.class).to(EmailService.class);    
}    
}
package com.sample.test;
import javax.inject.Inject;    
    public class ApplicationExample {        
    private MessageService service;        
    @Inject
    public void setService(MessageService svc){
    this.service=svc;
    }        
    public void sendMessage() {
    System.out.println(“I am here”);
    service.sendMessage(“welcome”, “java”);        
    }
    }
我的申请文件是:查看并检查

package com.sample.test;    
import com.google.inject.Guice;
import com.google.inject.Injector;

public class mymain {    
public static void main(String[] args) {    
Injector injector = Guice.createInjector(new AppInjectory());
ApplicationExample obj =                               injector.getInstance(ApplicationExample.class);
obj.sendMessage();    
}    
}
package com.sample.test;    
public interface MessageService {
boolean sendMessage(String msg, String receipient);
}
package com.sample.test;
import com.google.inject.AbstractModule;    
public class AppInjectory extends AbstractModule {    
@Override
protected void configure() {     
bind(MessageService.class).to(EmailService.class);    
}    
}
package com.sample.test;
import javax.inject.Inject;    
    public class ApplicationExample {        
    private MessageService service;        
    @Inject
    public void setService(MessageService svc){
    this.service=svc;
    }        
    public void sendMessage() {
    System.out.println(“I am here”);
    service.sendMessage(“welcome”, “java”);        
    }
    }
我的服务级别是:查看和检查

package com.sample.test;
//import com.google.inject.Singleton;
import javax.inject.Singleton;

@Singleton
public class EmailService implements MessageService {

public boolean sendMessage(String msg, String receipient) {
//some fancy code to send email
System.out.println(“Email Message sent to “+receipient+” with message=”+msg);
return true;
}    
}
我在这里得到空指针异常。我在这里做错了什么。?请帮助修复此问题。我在这里添加了错误堆栈跟踪。 请看

错误:

线程“main”中的异常我在这里 java.lang.NullPointerException 在com.sample.test.ApplicationExample.sendMessage上(ApplicationExample.java:16) 位于com.sample.test.mymain.main(mymain.java:13)


问题在于这一行:

ApplicationExample obj = injector.getInstance(ApplicationExample.class);

AppInjectory
模块中,您没有将
ApplicationExample
接口绑定到实现。您是否打算这样做(从您的模块中扣除):


可能重复的请格式化您的代码(并使其适合)。是否有理由
ApplicationExample
使用setter注入而不是构造函数注入?构造函数注入可以更容易地推断出
MessageService
不能为null的不变量。也就是说,我相信您展示的代码应该可以工作。这是导致错误的实际代码吗?看看这个例子。他们跟我在这里做的一样。请向我解释一下我哪里做错了。在示例()中,它正在将stacktrace添加到您的帖子中,并确保提及stacktrace包含哪些代码行。错误:线程“main”中的异常我在这里java.lang.NullPointerException位于com.sample.test.ApplicationExample.sendMessage(ApplicationExample.java:16)位于com.sample.test.mymain.main(mymain.java:13)
ApplicationExample
似乎是一个类,而不是一个接口。它有一个无参数构造函数和一个带注释的setter,因此Guice应该将它识别为JIT绑定,因此
injector.getInstance(ApplicationExample.class)
应该可以很好地使用此代码。