2016-08-16 62 views
-1

我在java.I中使用了下面的代碼不知道我在這裏做了什麼錯誤。Guice依賴注入器空指針異常

我的主要文件是:看,並檢查

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; 
}  
} 

在這裏我得到空指針異常。什麼錯了,我沒有here.?please幫助解決這個issue.I這裏添加的錯誤堆棧跟蹤。 請看看它。

錯誤:

Exception in thread 「main」 I am here java.lang.NullPointerException at com.sample.test.ApplicationExample.sendMessage(ApplicationExample.java:16) at com.sample.test.mymain.main(mymain.java:13)

+2

的可能的複製[?什麼是空指針異常,以及如何解決呢(http://stackoverflow.com/questions/218384/ what-is-a-nullpointerexception-and-how-do-i-fix-it) – sidgate

+0

請格式化您的代碼(並使其適合)。 – zhon

+0

ApplicationExample是否使用setter注入而不是構造函數注入是有原因的嗎?構造函數注入將使得更容易推理「消息服務」不能爲空的不變量。也就是說,我相信你所展示的代碼應該可以工作。這是你的實際代碼導致錯誤? –

回答

-1

問題就出在這行:

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

在你AppInjectory模塊你還沒有綁定您的ApplicationExample接口來實現。你也許意味着要做到這一點(從你的模塊中扣除):

MessageService obj = injector.getInstance(MessageService.class); 
+0

http://www.journaldev.com/2403/google-guice-dependency-injection-example-tutorial#comment-36062 看看這個例子。他們聽從了我在這裏所做的。 –

+0

請向我解釋我犯的錯誤。在示例中(http://www.journaldev.com/2403/google-guice-dependency-injection-example-tutorial#comment-36062)。它正在工作 –

+0

將stacktrace添加到您的帖子中,並確保提及哪些棧跟蹤所需的代碼行。 – nbokmans