Использование Google Guice для упрощения модульного тестирования - это только преимущество высокого уровня. Некоторые люди могут даже не использовать модульное тестирование в своем проекте. Люди используют Spring / Dependency Injection больше, чем только для модульного тестирования.
Преимущество низкого уровня использования Google Guice - это вопрос сплоченности вашего приложения, ваши классы в проекте могут быть слабо связаны друг с другом. Я могу предоставить класс для другого класса без их зависимости друг от друга.
Рассмотрим этот пример:
public class A{
}
public class B{
A a = new A();
}
Класс B будет тесно связан с классом A, или, другими словами, он зависит от существования класса A.
Но с Guice я могу вместо этого сделать его слабо связанным, как это:
public class B{
private A a;
@Inject
public B(A a){
this.a = a;
}
}
Класс B теперь слабо связан с A, и Guice отвечает за предоставление экземпляра A вместо того, чтобы B создавал его экземпляр. При этом вы можете расширить его, чтобы обеспечить интерфейс от А до Б, и реализация может быть объектом Mock, если вы хотите выполнить модульное тестирование своих приложений.
Сказав, что мы пока обсуждаем только преимущества внедрения зависимости. Помимо внедрения зависимостей, преимущества использования Google Guice:
- В Guice очень чистая реализация конструктора Injection. Как видно из примера, вы просто добавляете конструктор аннотаций @Inject.
- У Guice также есть сеттерная инъекция с той же аннотацией.
- Сказав это, инъекция на основе аннотаций является очень чистым подходом по сравнению с инъекцией на основе XML, как и некоторые другие реализации DI.
- Все внедрение и конфигурирование зависимостей использует Java, поэтому вы гарантированно получаете безопасность типов в своем приложении по умолчанию.
- Guice имеет очень легкую реализацию Аспектно-ориентированного программирования (или, может быть, вы можете назвать ее оболочкой для реализации AOPAlliance AOP). И хорошо, что он не генерирует заглушки или что-то еще.
Вот обзор. Но когда вы углубляетесь в Guice, в этом есть еще много хорошего. простой пример из реальной жизни - если вы используете GWT с реализацией MVP , компоненты / виджеты в вашем приложении GWT очень слабо связаны и не тесно связаны друг с другом.