XML-basierte Injektion im Frühjahr

XML-basierte Injektion im Frühjahr

1. Einführung

In diesem grundlegenden Lernprogramm erfahren Sie, wie Sie mit dem Spring Framework eine einfache XML-basierte Bean-Konfiguration durchführen.

2. Überblick

Beginnen wir mit dem Hinzufügen der Bibliotheksabhängigkeit von Spring inpom.xml:


    org.springframework
    spring-context
    5.1.4.RELEASE

Die neueste Version der Spring-Abhängigkeit befindet sich inhere.

3. Abhängigkeitsinjektion - Ein Überblick

Dependency injection ist eine Technik, bei der Abhängigkeiten eines Objekts von externen Containern bereitgestellt werden.

Nehmen wir an, wir haben eine Anwendungsklasse, die von einem Dienst abhängt, der die Geschäftslogik tatsächlich verarbeitet:

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

Angenommen,IService ist eine Schnittstelle:

public interface IService {
    public String serve();
}

Diese Schnittstelle kann mehrere Implementierungen haben.

Lassen Sie uns einen kurzen Blick auf eine mögliche Implementierung werfen:

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

Hier istIndexApp eine Komponente auf hoher Ebene, die von der Komponente auf niedriger Ebene abhängt, die alsIService bezeichnet wird.

Im Wesentlichen entkoppeln wirIndexApp von einer bestimmten Implementierung derIService, die je nach den verschiedenen Faktoren variieren kann.

4. Abhängigkeitsinjektion - In Aktion

Mal sehen, wie wir eine Abhängigkeit einfügen können.

4.1. Eigenschaften verwenden

Lassen Sie uns sehen, wie wir die Abhängigkeiten mithilfe einer XML-basierten Konfiguration miteinander verbinden können:




    

Wie zu sehen ist, erstellen wir eine Instanz vonIndexService und weisen ihr eine ID zu. Standardmäßig ist die Bean ein Singleton. Außerdem erstellen wir eine Instanz vonIndexApp.

Innerhalb dieser Bean injizieren wir die andere Bean mit der Setter-Methode.

4.2. Konstruktor verwenden

Anstatt eine Bean über die Setter-Methode zu injizieren, können wir die Abhängigkeit mit dem Konstruktor injizieren:


    

4.3. Verwenden von Static Factory

Wir können auch eine von einer Fabrik zurückgegebene Bohne injizieren. Erstellen wir eine einfache Factory, die eine Instanz vonIService basierend auf der angegebenen Anzahl zurückgibt:

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

Lassen Sie uns nun sehen, wie wir die obige Implementierung verwenden können, um eine Bean mithilfe einer XML-basierten Konfiguration inIndexApp einzufügen:


    



    

Im obigen Beispiel rufen wir die statischegetService-Methode mitfactory-method auf, um eine Bean mit der IDmessageService zu erstellen, die wir inIndexApp. injizieren

4.4. Verwenden der Factory-Methode

Betrachten wir eine Instanzfactory, die eine Instanz vonIService basierend auf der angegebenen Anzahl zurückgibt. Dieses Mal ist die Methode nicht statisch:

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

Nun wollen wir sehen, wie wir die obige Implementierung verwenden können, um eine Bean mithilfe der XML-Konfiguration inIndexApp einzufügen:



    


    

Im obigen Beispiel rufen wir diegetService-Methode für eine Instanz vonInstanceServiceFactory auf und verwendenfactory-method, um eine Bean mit der IDmessageService zu erstellen, die wir inIndexAppinjizieren. s.

5. Testen

So können wir auf konfigurierte Beans zugreifen:

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

6. Fazit

In diesem kurzen Tutorial haben wir Beispiele veranschaulicht, wie wir mithilfe der XML-basierten Konfiguration mithilfe von Spring Framework Abhängigkeiten einfügen können.

Die Implementierung dieser Beispiele finden Sie inthe GitHub project - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.