Как Google Guice работает без @Inject в моей тестовой программе? - PullRequest
1 голос
/ 24 января 2012

Я начал изучать Google Guice сегодня, чтобы внедрить зависимости в моем приложении.

Я заметил, что нигде не использую аннотацию @Inject.Но это работает.Не могу понять эту концепцию.В этом примере, где @Inject лучше всего подходит для моего scenerio?Если кто-то может указать мне.

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 Ответ

1 голос
/ 25 января 2012

Нет лучшего соответствия для @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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...