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», при которой на всё приложение создаётся только один объект данного типа (инжектор следит за этим).

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

Примечания

  1. Release 4.1 — 2016.
  2. Release 4.0 — 2015.
  3. Release 3.0 — 2014.
  4. Release 2.0 — 2014.
  5. Release 1.0 — 2014.
  6. Release 4.2 — 2018.
  7. 18th Annual Jolt Award winners (англ.). Dr. Dobb's Journal (19 марта 2008). Дата обращения: 13 июня 2024. Архивировано 18 декабря 2024 года.

Ссылки

Категории