Wprowadzenie do Google Guice for DI
Witam,
dzisiaj opowiem o tym, jak zacząć korzystać z Google Guice for dependency injection w Javie. Najpierw przedstawię kilka koncepcji dotyczących frameworka, a następnie napiszemy prostą aplikację, aby ją zilustrować.
Dependency Injection
jak już rozmawialiśmy w tym poście, dependency injection (DI) jest techniką dostarczania zależności dla klientów, zamiast tego, aby ten ostatni wyraźnie je uzyskiwał. DI jest zasadniczo sposobem na osiągnięcie bardziej ogólnego celu zwanego zasadą inwersji zależności (DIP), która stanowi:
zamiast zależeć od implementacji, woli zależeć od abstrakcji.
podczas stosowania DI, potrzebujemy sposobu na wstrzyknięcie (wire, bind) zależności dla klientów, którzy je żądają, możemy to zrobić ręcznie podczas tworzenia instancji klasy klienta lub możemy polegać na frameworku do automatyzacji tych zadań, a także dodać kilka ciekawych funkcji, takich jak zarządzanie cyklem życia.
Jeśli chodzi o Javę, istnieje wiele frameworków z możliwymi zaletami i wadami, na przykład Weld, Spring, Guice itp.
w tym poście będziemy używać Guice, a w przyszłym poście zamierzam mówić o Spring, prawdopodobnie w kontekście projektowania RESTful API Z Spring Boot i Spring REST.
Google Guice
Google Guice jest frameworkiem do automatyzacji wstrzykiwania zależności poprzez dostarczenie kontenera, do którego możemy mapować abstrakcje i implementacje. Po mapowaniu zależności będą automatycznie wstrzykiwane klientom na żądanie.
mapowanie w Guice jest realizowane przez implementację com.google.wstrzyknąć.Moduł, który jest zwykle wykonywany przez dziedziczenie z abstrakcyjnej klasy bazowej com.google.wstrzyknąć.AbstractModule.
Po tym, musimy nadpisać metodę configure i polegać na płynnym API, wywołując bind i metody do zdefiniowania mapowania pomiędzy abstrakcją (parametr bind) i implementacją (parametr to).
następnie możemy wstrzyknąć zależności przez adnotację Twoich zależności za pomocą com.google.wstrzyknąć.Wstrzyknąć.
W końcu musimy uzyskać kom.google.wstrzyknąć.Injector z naszego wcześniej zdefiniowanego modułu, dzięki czemu jesteśmy teraz w stanie pobrać klienta za pomocą metody getInstance, a jego zależności zostaną automatycznie wstrzyknięte.
przykład
Ten przykład składa się z części systemu Java, która wysyła informacje dziennika o swoim działaniu. Aby uprościć włączenie Guice do naszego projektu, użyjemy Maven jako narzędzia do budowania.
w pom.xml, Dodaj następujący artefakt dla Guice w wersji 4.0 w sekcji zależności:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version></wersja>
</zależność>
stwórzmy interfejs logsender reprezentujący zachowanie: „wysyła dziennik do jakiegoś medium”:
ta usługa będzie używana przez klasę exchanger, która ma odniesienie do logsendera, a wstrzyknięcie zostanie wykonane przez jej konstruktora z adnotacją @inject:
implementacja StdoutLogSender wyśle dziennik do standardowego strumienia wyjściowego, w tym przypadku konsoli:
teraz, musimy powiedzieć Guice jak mapować logsender do stdoutlogsender, i robimy to za pomocą klasy loggingmodule:
wreszcie, w aplikacji klasy głównej, możemy utworzyć wtryskiwacz i przekazać nasz loggingmodule do jego konstruktora. Następnie możemy uzyskać instancję Exchangera, która będzie zależała od logsendera:
wnioski
w tym artykule omówiliśmy podstawy dotyczące rozpoczęcia pracy z Google Guice do automatyzacji zadań wstrzykiwania zależności w aplikacji Java. Napisaliśmy prostą aplikację, aby zilustrować, jak definiować mapowanie między abstrakcjami a implementacjami i jak je wstrzykiwać naszym klientom.
mam nadzieję, że dzięki temu podstawowemu przeglądowi Guice będziesz mógł kontynuować swoje badania na temat wstrzykiwania zależności i jak rozwijać kod z niższym poziomem sprzężenia i wysokim poziomem spójności.