Ответ 1
Использование 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, чтобы его создать. С этим вы можете расширить его, чтобы обеспечить интерфейс от A до B, а реализация может быть объектом Mock, если вы хотите unit test ваши приложения.
Сказав, что мы только обсуждаем преимущества Injection Dependency до сих пор. Преимущества внедрения Google Guice:
- Guice имеет очень чистую реализацию конструктора Injection. Как видно из примера, вы просто добавляете конструктор аннотации @Injection.
- У Guice также есть Setter Injection с использованием той же аннотации.
- Сказав это, аннотация, основанная на Injection, является очень чистым подходом по сравнению с внедрением на основе XML, как и в другой реализации DI.
- Все инъекции и конфигурация зависимостей используют Java, поэтому вы гарантированно получите тип безопасности в своем приложении по умолчанию.
- Guice имеет очень легкую реализацию Aspect Oriented Programming (или, возможно, вы можете назвать ее оболочкой для реализации AOPAlliance AOP). И хорошо, что он не генерирует заглушки или что-то еще.
Это обзор. Но по мере того как вы становитесь глубже с Гисом, в этом есть еще много хороших вещей. Простой пример реальной жизни - если вы используете GWT с реализацией MVP, компоненты/виджеты в вашем приложении GWT очень слабо связаны и не сильно интегрированы друг с другом.