Articles

Introduzione a Google Guice per DI

Ciao,

Oggi, ho intenzione di parlare di come iniziare con Google Guice per l’iniezione di dipendenza in Java. In primo luogo, introdurrò alcuni concetti sul framework, quindi scriveremo una semplice applicazione per esemplificare.

Dependency Injection

Come abbiamo parlato in questo post, dependency injection (DI) è una tecnica per fornire dipendenze per i client invece di avere quest’ultimo esplicitamente ottenerli. DI è fondamentalmente un modo per raggiungere un obiettivo più generale chiamato dependency inversion principle (DIP), che afferma:

Invece di dipendere dalle implementazioni, preferisci dipendere dalle astrazioni.

Quando si applica DI, abbiamo bisogno di un modo per iniettare (legare, legare) le dipendenze per i client che li stanno richiedendo, potremmo farlo manualmente quando istanziiamo la classe client o potremmo fare affidamento su un framework per automatizzare queste attività e anche aggiungere alcune funzionalità interessanti, come la gestione del ciclo di vita.

Per quanto riguarda Java, ci sono una varietà di framework con possibili pro e contro, ad esempio, Weld, Spring, Guice ecc.

In questo post, useremo Guice e in un post futuro, intendo parlare di Spring, probabilmente nel contesto della progettazione di API RESTful con Spring Boot e Spring REST.

Google Guice

Google Guice è un framework per automatizzare l’iniezione di dipendenze fornendo un contenitore in cui possiamo mappare astrazioni e implementazioni. Dopo la mappatura, le dipendenze verranno iniettate automaticamente nei client quando richiesto.

La mappatura in Guice è ottenuta mediante l’implementazione di com.Google.iniettare.Modulo che viene normalmente eseguito ereditando dalla classe di base astratta com.Google.iniettare.AbstractModule.

Dopo, dobbiamo sovrascrivere il metodo configure e fare affidamento su un’API fluente chiamando bind e to metodi per definire la mappatura tra l’astrazione (parametro di bind) e l’implementazione (parametro di to).

Quindi, possiamo iniettare le dipendenze annotando le tue dipendenze con com.Google.iniettare.Iniettare.

Infine, abbiamo bisogno di ottenere una com.Google.iniettare.Iniettore dal nostro modulo precedentemente definito, quindi ora siamo in grado di recuperare il client con il metodo getInstance e le sue dipendenze verranno iniettate automaticamente.

Esempio

Questo esempio consiste in una parte di un sistema Java che invia informazioni di registro sul suo funzionamento. Per semplificare l’inclusione di Guice nel nostro progetto, useremo Maven come strumento di compilazione.

Nel pom.xml, aggiungere il seguente artefatto per Guice alla versione 4.0 nella sezione dipendenze:

<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version></versione>
</dipendenza>

creare l’interfaccia LogSender per rappresentare il comportamento: “invia il log di alcuni media”:

Questo servizio saranno utilizzati da parte di Scambiatore di classe che ha un riferimento a LogSender e l’iniezione sarà fatto dal suo costruttore annotata con @Inject:

La realizzazione StdoutLogSender potranno inviare il log per il flusso di output standard, in questo caso la console:

Ora, abbiamo bisogno di dire Guice come mappa LogSender per StdoutLogSender, e facciamo il LoggingModule classe:

Infine, nella classe principale dell’Applicazione, siamo in grado di creare un Iniettore e passare la nostra LoggingModule al suo costruttore. Quindi, siamo in grado di ottenere un’istanza di Scambiatore che avrà la sua dipendenza LogSender limite:

Conclusione

In questo articolo, abbiamo discusso le nozioni di base su come iniziare con Google Guice per l’automazione di dependency injection attività in un’applicazione Java. Abbiamo scritto una semplice applicazione per esemplificare come definire la mappatura tra astrazioni e implementazioni e come iniettarle nei nostri clienti.

Spero che con questa panoramica di base di Guice tu possa continuare i tuoi studi sull’iniezione di dipendenza e su come sviluppare codice con un livello inferiore di accoppiamento e un alto livello di coesione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *