2012-01-24 67 views
1

我今天開始探索Google Guice,在我的應用程序中執行依賴注入。Google Guice如何在不使用@的情況下在我的測試程序的任何位置進行工作?

我注意到我沒有在任何地方使用@Inject註釋。但它的工作。無法理解這個概念。在這個例子中,@Inject是最適合我的場景嗎?如果有人能指出我。

public interface Tweeter { 
    public void sendTweet(String message); 
} 

public class SmsTweeter implements Tweeter { 
    @Override 
    public void sendTweet(String message) { 
     System.out.println("You SMS tweet: "+message); 
    } 
} 

import com.google.inject.AbstractModule; 

public class TweetModule extends AbstractModule{ 

    @Override 
    protected void configure() { 
     bind(Tweeter.class).to(SmsTweeter.class);  
    } 
} 

import com.google.inject.Guice; 
import com.google.inject.Injector; 

public class TestTweetClient { 
    public static void main(String[] args) { 
     Injector injector = Guice.createInjector(new TweetModule()); 
     Tweeter tweeter = injector.getInstance(Tweeter.class); 
     tweeter.sendTweet("Hi there"); 
    } 
} 

它打印(隱藏的執行工作): 您的短信鳴叫:您好

回答

1

沒有爲@Inject在你的例子沒有最合適的。 SmsTweeter類具有隱式的零參數構造函數。你可以明確說明並在那裏添加@Inject,但這不是必需的。

public class SmsTweeter implements Tweeter { 

    @Inject 
    SmsTweeter() { 
     // nothing to do 
    } 

    @Override 
    public void sendTweet(String message) { 
     System.out.println("You SMS tweet: "+message); 
    } 
} 
相關問題