Google Guice

Google Guice — открытый фреймворк для внедрения зависимостей (dependency injection) на языке Java. Разрабатывается компанией Google и впервые был выпущен в 2008 году под лицензией Apache License. Guice первым среди подобных решений реализовал внедрение зависимостей с помощью аннотаций. В 2008 году проект получил Jolt Award как лучшее фреймворк-решение[7].

Что важно знать

Dependency Injection (DI) и Inversion of Control (IoC)

Inversion of Control — это шаблон проектирования в разработке программного обеспечения, при котором программы не создают необходимые зависимости (то есть объекты или компоненты, от которых они зависят) самостоятельно, а получают их извне. Такой подход в принципе возможен и без dependency injection, однако DI значительно упрощает реализацию этого принципа.

Внедрение зависимостей предполагает, что компоненты создаются не непосредственным пользователем, а с помощью специального «инжектора» (именно так называется этот объект в Google Guice). Инжектор может создавать конкретные объекты для всех необходимых зависимостей и, соответственно, предоставлять клиенту сложные составные объекты. Для инжектора указываются конкретные классы (например, реализации интерфейсов), которые следует использовать. В Google Guice это реализовано при помощи модулей.

Модули в Google Guice

Модули в Guice группируют зависимости внутри определённой предметной области. Границы таких областей определяются самим разработчиком и могут сильно различаться в разных проектах. Общим для всех модулей является то, что они «привязывают» абстрактные зависимости к конкретным реализуемым классам.

Например, можно задать, чтобы везде, где требуется объект интерфейса «MailSender», инжектировался экземпляр класса «NetworkMailSender». За счёт централизованного сопоставления типов в модулях инжектора можно легко заменить конкретные реализуемые объекты. Так, для модульного тестирования можно временно связать с интерфейсом «MailSender» специальный класс-заглушку «MailSenderMock», имитирующий отправку почты и позволяющий создавать простые, быстрые, независимые и надёжные тесты.

Области (scopes)

Для создаваемых объектов можно указать область действия, то есть как долго созданный экземпляр будет храниться и переиспользоваться. В Guice такие параметры называются «scope». Наиболее распространённые — это область по умолчанию (Default Scope), при которой для каждого обращения создаётся отдельный объект, и область «singleton», при которой на всё приложение создаётся только один объект данного типа (инжектор следит за этим).

Области можно расширять или создавать для них свои собственные реализации.

Примечания

Ссылки