Iniezione basata su XML in primavera

1. Introduzione

In questo tutorial di base, impareremo come eseguire una semplice configurazione dei bean basata su XML con Spring Framework.

2. Panoramica

Iniziamo aggiungendo la dipendenza della libreria di Spring nel pom.xml :

 org.springframework spring-context 5.1.4.RELEASE  

L'ultima versione della dipendenza Spring può essere trovata qui.

3. Dependency Injection: una panoramica

L'inserimento delle dipendenze è una tecnica in base alla quale le dipendenze di un oggetto vengono fornite da contenitori esterni.

Supponiamo di avere una classe di applicazione che dipende da un servizio che gestisce effettivamente la logica di business:

public class IndexApp { private IService service; // standard constructors/getters/setters } 

Ora diciamo che IService è un'interfaccia:

public interface IService { public String serve(); } 

Questa interfaccia può avere più implementazioni.

Diamo una rapida occhiata a una potenziale implementazione:

public class IndexService implements IService { @Override public String serve() { return "Hello World"; } } 

In questo caso, IndexApp è un componente di alto livello che dipende dal componente di basso livello denominato IService .

In sostanza, stiamo scollegando IndexApp da una particolare implementazione di IService che può variare in base ai vari fattori.

4. Iniezione di dipendenza - in azione

Vediamo come possiamo iniettare una dipendenza.

4.1. Utilizzo delle proprietà

Vediamo come possiamo collegare le dipendenze insieme utilizzando una configurazione basata su XML:

Come si può vedere, stiamo creando un'istanza di IndexService e assegnandole un id. Per impostazione predefinita, il bean è un singleton. Inoltre, stiamo creando un'istanza di IndexApp .

All'interno di questo bean, stiamo iniettando l'altro bean utilizzando il metodo setter.

4.2. Utilizzando Constructor

Invece di iniettare un bean tramite il metodo setter, possiamo iniettare la dipendenza utilizzando il costruttore:

4.3. Utilizzando Static Factory

Possiamo anche iniettare un fagiolo restituito da una fabbrica. Creiamo una semplice factory che restituisca un'istanza di IService in base al numero fornito:

public class StaticServiceFactory { public static IService getNumber(int number) { // ... } } 

Ora vediamo come potremmo usare l'implementazione sopra per iniettare un bean in IndexApp usando una configurazione basata su XML:

Nell'esempio sopra, stiamo chiamando il metodo statico getService utilizzando il metodo factory per creare un bean con id messageService che inseriamo in IndexApp.

4.4. Utilizzando il metodo di fabbrica

Consideriamo una factory di istanze che restituisce un'istanza di IService in base al numero fornito. Questa volta, il metodo non è statico:

public class InstanceServiceFactory { public IService getNumber(int number) { // ... } } 

Ora vediamo come potremmo usare l'implementazione sopra per iniettare un bean in IndexApp usando la configurazione XML:

Nell'esempio precedente, stiamo chiamando il metodo getService su un'istanza di InstanceServiceFactory utilizzando il metodo factory per creare un bean con ID messageService che iniettiamo in IndexApp .

5. Test

Ecco come possiamo accedere ai bean configurati:

@Test public void whenGetBeans_returnsBean() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("..."); IndexApp indexApp = applicationContext.getBean("indexApp", IndexApp.class); assertNotNull(indexApp); } 

6. Conclusione

In questo breve tutorial, abbiamo illustrato esempi di come possiamo iniettare dipendenza usando la configurazione basata su XML usando Spring Framework.

L'implementazione di questi esempi può essere trovata nel progetto GitHub: questo è un progetto basato su Maven, quindi dovrebbe essere facile da importare ed eseguire così com'è.