XML-gebaseerde injectie in het voorjaar

1. Inleiding

In deze eenvoudige zelfstudie leren we hoe u eenvoudige op XML gebaseerde bean-configuratie kunt uitvoeren met Spring Framework.

2. Overzicht

Laten we beginnen met het toevoegen van de bibliotheekafhankelijkheid van Spring in het pom.xml:

 org.springframework spring-context 5.1.4.RELEASE 

De nieuwste versie van de Spring-afhankelijkheid is hier te vinden.

3. Afhankelijkheidsinjectie - een overzicht

Dependency injection is een techniek waarbij afhankelijkheden van een object worden geleverd door externe containers.

Laten we zeggen dat we een applicatieklasse hebben die afhankelijk is van een service die daadwerkelijk de bedrijfslogica afhandelt:

openbare klasse IndexApp {privé IService-service; // standard constructors / getters / setters} 

Laten we nu zeggen IService is een interface:

openbare interface IService {public String serve (); } 

Deze interface kan meerdere implementaties hebben.

Laten we een snelle blik werpen op een mogelijke implementatie:

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

Hier, IndexApp is een component op hoog niveau die afhankelijk is van de component op laag niveau die wordt genoemd IService.

In wezen zijn we aan het ontkoppelen IndexApp van een bepaalde implementatie van de IService die kunnen variëren op basis van de verschillende factoren.

4. Afhankelijkheidsinjectie - in actie

Laten we eens kijken hoe we een afhankelijkheid kunnen injecteren.

4.1. Eigenschappen gebruiken

Laten we eens kijken hoe we de afhankelijkheden met elkaar kunnen verbinden met behulp van een op XML gebaseerde configuratie:

Zoals te zien is, maken we een instantie van IndexService en het een id toewijzen. Standaard is de boon een singleton. We maken ook een instantie van IndexApp.

Binnen deze boon injecteren we de andere boon met behulp van de setter-methode.

4.2. Constructor gebruiken

In plaats van een boon te injecteren via de setter-methode, kunnen we de afhankelijkheid injecteren met behulp van de constructor:

4.3. Statische fabriek gebruiken

We kunnen ook een door een fabriek geretourneerde boon injecteren. Laten we een eenvoudige fabriek maken die een exemplaar retourneert van IService op basis van het geleverde aantal:

openbare klasse StaticServiceFactory {openbare statische IService getNumber (int nummer) {// ...}} 

Laten we nu eens kijken hoe we bovenstaande implementatie kunnen gebruiken om een ​​boon in te injecteren IndexApp met behulp van een XML-gebaseerde configuratie:

In het bovenstaande voorbeeld noemen we de static getService methode gebruiken fabrieksmethode om een ​​boon met id te maken messageService waarin we injecteren IndexApp.

4.4. Met behulp van de fabrieksmethode

Laten we eens kijken naar een exemplaarfabriek die een exemplaar retourneert van IService gebaseerd op het geleverde aantal. Deze keer is de methode niet statisch:

openbare klasse InstanceServiceFactory {openbare IService getNumber (int nummer) {// ...}} 

Laten we nu eens kijken hoe we bovenstaande implementatie kunnen gebruiken om een ​​boon in te injecteren IndexApp XML-configuratie gebruiken:

In het bovenstaande voorbeeld noemen we de getService methode op een exemplaar van InstanceServiceFactory gebruik makend van fabrieksmethode om een ​​boon met id te maken messageService waarin we injecteren IndexApp.

5. Testen

Dit is hoe we toegang kunnen krijgen tot geconfigureerde bonen:

@Test openbare leegte whenGetBeans_returnsBean () {ApplicationContext applicationContext = nieuwe ClassPathXmlApplicationContext ("..."); IndexApp indexApp = applicationContext.getBean ("indexApp", IndexApp.class); assertNotNull (indexApp); } 

6. Conclusie

In deze korte tutorial hebben we voorbeelden geïllustreerd van hoe we afhankelijkheid kunnen injecteren met behulp van de op XML gebaseerde configuratie met Spring Framework.

De implementatie van deze voorbeelden is te vinden in het GitHub-project - dit is een op Maven gebaseerd project, dus het moet gemakkelijk kunnen worden geïmporteerd en uitgevoerd zoals het is.