Articles

Introducere în Google Guice pentru DI

Bună ziua,

astăzi, am de gând să vorbesc despre cum să începeți cu Google Guice pentru injecție dependență în Java. În primul rând, voi introduce câteva concepte despre cadru, apoi vom scrie o aplicație simplă pentru a exemplifica.

dependenta de injectare

după cum am vorbit pe acest post, dependența de injectare (DI) este o tehnică de a oferi dependențe pentru clienți în loc de a avea acesta din urmă în mod explicit obținerea lor. DI este practic o modalitate de a atinge un obiectiv mai general numit principiul inversiunii dependenței (DIP), care afirmă:

în loc să depindă de implementări, preferă să depindă de abstracții.

atunci când aplicăm DI, avem nevoie de o modalitate de a injecta (sârmă, legare) dependențele pentru clienții care le solicită, am putea să o facem manual atunci când instanțiem clasa client sau ne-am putea baza pe un cadru pentru a automatiza aceste sarcini și, de asemenea, să adăugăm câteva funcționalități interesante, cum ar fi managementul ciclului de viață.în ceea ce privește Java, există o varietate de cadre cu argumente pro și contra, de exemplu, sudură, arc, Guice etc.

în acest post, vom folosi Guice și într-o postare viitoare, intenționez să vorbesc despre primăvară, probabil în contextul proiectării API-urilor RESTful cu Boot de primăvară și REST de primăvară.

Google Guice

Google Guice este un cadru pentru automatizarea injecției de dependență prin furnizarea unui container unde putem mapa abstracții și implementări. După mapare, dependențele vor fi injectate automat în clienți atunci când sunt solicitate.

cartografierea în Guice se realizează prin implementarea com.google.injectați.Modul care se face în mod normal prin moștenirea din clasa de bază abstractă com.google.injectați.AbstractModule.

după aceea, trebuie să suprascriem metoda configure și să ne bazăm pe un API fluent apelând bind and to methods pentru a defini maparea dintre abstractizare (parametrul bind) și implementare (parametrul to).apoi, putem injecta dependențele adnotând dependențele dvs. cu com.google.injectați.Injectați.

în cele din urmă, avem nevoie pentru a obține un com.google.injectați.Injector din modulul nostru definit anterior, astfel încât suntem acum capabili de a prelua clientul cu metoda getInstance și dependențele sale vor fi injectate automat.

exemplu

acest exemplu constă dintr-o parte a unui sistem Java care trimite informații jurnal despre funcționarea sa. Pentru a simplifica includerea Guice în proiectul nostru, vom folosi Maven ca instrument de construire.

în pom.xml, adăugați următorul artefact pentru Guice la versiunea 4.0 în secțiunea dependențe:

<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version></versiune>
</dependență>

să creăm interfața logsender pentru a reprezenta comportamentul: „trimite jurnalul către un mediu”:

acest serviciu va fi utilizat de clasa schimbătorului care are o referință la logsender și injecția va fi făcută de constructorul său adnotat cu @inject:

implementarea StdoutLogSender va trimite jurnalul la fluxul de ieșire standard, în acest caz consola:

acum, trebuie să-i spunem lui Guice cum să mapeze logsender la stdoutlogsender și o facem prin clasa loggingmodule:

în cele din urmă, în aplicația principală de clasă, putem crea un injector și putem trece loggingmodule-ul nostru constructorului său. Apoi, suntem capabili de a obține o instanță de schimbător, care va avea dependența de LogSender legat:

concluzie

În acest articol, am discutat elementele de bază cu privire la modul de a începe cu Google Guice pentru automatizarea sarcinilor de injecție dependență în aplicație Java. Am scris o aplicație simplă pentru a exemplifica modul de definire a mapării între abstracții și implementări și cum să le injectăm în clienții noștri.

sper că cu această prezentare generală de bază a Guice puteți continua studiile despre injectarea dependenței și cum să dezvoltați codul cu un nivel mai scăzut de cuplare și un nivel ridicat de coeziune.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *