XML-baseret injektion om foråret

1. Introduktion

I denne grundlæggende vejledning lærer vi, hvordan man laver enkel XML-baseret bønnekonfiguration med Spring Framework.

2. Oversigt

Lad os starte med at tilføje Spring's biblioteksafhængighed i pom.xml:

 org.springframework spring-context 5.1.4.RELEASE 

Den seneste version af forårets afhængighed kan findes her.

3. Afhængighedsinjektion - en oversigt

Afhængighedsinjektion er en teknik, hvor afhængigheder af et objekt leveres af eksterne containere.

Lad os sige, at vi har en applikationsklasse, der afhænger af en tjeneste, der rent faktisk håndterer forretningslogikken:

offentlig klasse IndexApp {privat IService-tjeneste; // standard konstruktører / getters / setters} 

Lad os sige IService er et interface:

offentlig grænseflade IService {public String serve (); } 

Denne grænseflade kan have flere implementeringer.

Lad os se hurtigt på en potentiel implementering:

offentlig klasse IndexService implementerer IService {@Override public String serve () {return "Hello World"; }} 

Her, IndexApp er en komponent på højt niveau, der afhænger af den kaldte komponent på lavt niveau IService.

I det væsentlige afkobler vi IndexApp fra en særlig implementering af programmet IService som kan variere baseret på de forskellige faktorer.

4. Afhængighedsinjektion - i aktion

Lad os se, hvordan vi kan injicere en afhængighed.

4.1. Brug af egenskaber

Lad os se, hvordan vi kan koble afhængighederne sammen ved hjælp af en XML-baseret konfiguration:

Som det kan ses, opretter vi en forekomst af IndexService og tildele det et id. Som standard er bønnen en singleton. Vi opretter også en forekomst af IndeksApp.

Inden for denne bønne injicerer vi den anden bønne ved hjælp af setter-metoden.

4.2. Brug af Constructor

I stedet for at injicere en bønne via setter-metoden kan vi injicere afhængigheden ved hjælp af konstruktøren:

4.3. Brug af Statisk fabrik

Vi kan også injicere en bønne, der returneres af en fabrik. Lad os oprette en simpel fabrik, der returnerer en forekomst af IService baseret på det leverede nummer:

offentlig klasse StaticServiceFactory {offentlig statisk IService getNumber (int-nummer) {// ...}} 

Lad os nu se, hvordan vi kunne bruge ovenstående implementering til at injicere en bønne i IndexApp ved hjælp af en XML-baseret konfiguration:

I ovenstående eksempel kalder vi det statiske getService metode ved hjælp af fabriksmetode at skabe en bønne med id messageService som vi sprøjter ind i IndeksApp.

4.4. Brug af fabriksmetoden

Lad os overveje en instansfabrik, der returnerer en forekomst af IService baseret på det leverede nummer. Denne gang er metoden ikke statisk:

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

Lad os nu se, hvordan vi kunne bruge ovenstående implementering til at injicere en bønne i IndexApp ved hjælp af XML-konfiguration:

I ovenstående eksempel kalder vi getService metode på en forekomst af InstanceServiceFactory ved brug af fabriksmetode at skabe en bønne med id messageService som vi injicerer i IndexApp.

5. Testning

Sådan får vi adgang til konfigurerede bønner:

@Test offentlig ugyldig nårGetBeans_returnsBean () {ApplicationContext applicationContext = ny ClassPathXmlApplicationContext ("..."); IndexApp indexApp = applicationContext.getBean ("indexApp", IndexApp.class); assertNotNull (indexApp); } 

6. Konklusion

I denne hurtige vejledning illustrerede vi eksempler på, hvordan vi kan injicere afhængighed ved hjælp af den XML-baserede konfiguration ved hjælp af Spring Framework.

Implementeringen af ​​disse eksempler findes i GitHub-projektet - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.