Was ist Abhängigkeitsinjektion? - Wissen, wie man Abhängigkeitsinjektion implementiert

Dieser Artikel über Was ist Abhängigkeitsinjektion? Ist eine umfassende Anleitung zur Abhängigkeitsinjektion mit einem praktischen Start im Frühjahr.

In einer Welt, in der wir täglich mit Programmiersprachen arbeiten, suchen wir alle nach Methoden und Tricks, um unser Leben einfacher zu machen. Nun, Dependency Injection ist eine solche Technik, die darauf abzielt, dem Entwicklercode auf einfache Weise zu helfen, indem Abhängigkeiten eines anderen Objekts bereitgestellt werden. In diesem Artikel über Was ist Abhängigkeitsinjektion? Ich werde Ihnen helfen, diese Technik im Detail zu verstehen.

Die folgenden Themen werden in diesem Artikel behandelt:



Beginnen wir also mit diesem Artikel.

Was ist Abhängigkeitsinjektion?

Abhängigkeitsinjektion ist die Fähigkeit eines Objekts, Abhängigkeiten eines anderen Objekts bereitzustellen.

Ich bin mir ziemlich sicher, dass Sie unter der obigen technischen Definition möglicherweise nichts verstanden haben. Lassen Sie mich die Verwirrung für Sie beseitigen.

Was fällt Ihnen ein, wenn Sie den Begriff Abhängigkeit hören?

Offensichtlich etwas, das sich auf etwas anderes stützt, oder?

Das gilt auch für die Programmierung.

Die Abhängigkeit bei der Programmierung ist ein Ansatz, bei dem eine Klasse bestimmte Funktionen einer anderen Klasse verwendet. Wenn Sie beispielsweise zwei Klassen A und B betrachten und sagen, dass Klasse A Funktionen der Klasse B verwendet, bedeutet dies, dass Klasse A eine Abhängigkeit von Klasse B aufweist. Wenn Sie nun in Java codieren, müssen Sie dies wissen das musst duErstellen Sie eine Instanz der Klasse B, bevor die Objekte von Klasse A verwendet werden.

Arten von Klassen - Was ist Abhängigkeitsinjektion - Edureka

Wenn ich nun die Abhängigkeitsinjektion für Sie definieren muss, wird der Prozess zum Erstellen eines Objekts für eine andere Klasse und zum direkten Verwenden der Abhängigkeit durch die Klasse als Abhängigkeitsinjektion bezeichnet. Es sind hauptsächlich drei Klassen beteiligt:

  • Kundenklasse: Dies ist die abhängige Klasse und hängt von der Service-Klasse ab.

  • Serviceklasse: Diese Klasse bietet einen Dienst für die Clientklasse.

  • Injektorklasse: Diese Klasse ist dafür verantwortlich, das Serviceklassenobjekt in die Clientklasse einzufügen

Nachdem Sie verstanden haben, was Abhängigkeitsinjektion ist, möchte ich Sie als Nächstes durch das Prinzip führen, auf dem die Abhängigkeitsinjektion basiert.

Umkehrung der Kontrolle

Wie ich oben erwähnt habe, ist die Inversion der Kontrolle ein Prinzip, auf dessen Grundlage die Abhängigkeitsinjektion durchgeführt wird. Wie der Name schon sagt, wird Inversion of Control im Grunde genommen verwendet, um verschiedene Arten von zusätzlichen Verantwortlichkeiten einer Klasse umzukehren, anstatt die Hauptverantwortung.

Wenn ich Sie einfacher erklären muss, dann betrachten Sie ein Beispiel, in dem Sie die Fähigkeit haben, zu kochen. Nach dem IoC-Prinzip können Sie die Steuerung umkehren, sodass Sie anstelle des Kochens von Lebensmitteln direkt von außen bestellen können, wobei Sie Lebensmittel vor Ihrer Haustür erhalten. Daher wird der Prozess der Lieferung von Lebensmitteln vor Ihrer Haustür als Umkehrung der Kontrolle bezeichnet.

Sie müssen nicht selbst kochen, sondern können das Essen bestellen und einen Zusteller das Essen für Sie liefern lassen. Auf diese Weise müssen Sie sich nicht um die zusätzlichen Verantwortlichkeiten kümmern und sich nur auf die Hauptarbeit konzentrieren.

Nachdem Sie nun das Prinzip der Abhängigkeitsinjektion kennen, möchte ich Sie durch die Arten der Abhängigkeitsinjektion führen.

Arten der Abhängigkeitsinjektion

Es gibt hauptsächlich drei Arten der Abhängigkeitsinjektion:

gehe zu Anweisung c ++
  • Konstruktorinjektion: Bei dieser Art der Injektion liefert der Injektor die Abhängigkeit über den Clientklassenkonstruktor.

  • Setter Injection / Property Injection: Bei dieser Art der Injektion injiziert die Injektormethode die Abhängigkeit von der vom Client bereitgestellten Setter-Methode.

  • Schnittstelleninjektion: Bei dieser Art der Injektion verwendet der Injektor die Schnittstelle, um die Abhängigkeit von der Client-Klasse bereitzustellen. Die Clients müssen eine Schnittstelle implementieren, die a verfügbar machtSetter-Methodewelcheakzeptiert die Abhängigkeit.

Bis jetzt hoffe ich, dass Sie die Tatsache verstanden haben, dass Dependency Injection dafür verantwortlich ist, Objekte zu erstellen, zu verstehen, welche Klassen diese Objekte benötigen, und diese Klassen schließlich mit den Objekten zu versorgen. Lassen Sie uns in diesem Sinne als nächstes die Vorteile der Abhängigkeitsinjektion untersuchen.

Vorteile der Abhängigkeitsinjektion

Bevor ich die Vorteile der Abhängigkeitsinjektion aufführe, möchte ich Ihnen die Notwendigkeit dieser Injektion auf Branchenebene erläutern, damit Sie die Vorteile besser verstehen.

Stellen Sie sich ein Szenario vor, in dem Sie eine E-Mail-Klasse haben, deren alleinige Verantwortung darin besteht, sich um die empfangenen E-Mails zu kümmern. Diese Klasse verfügt nun über Objekte wie 'An E-Mail-Adresse', 'Von E-Mail-Adresse', 'Betreff und Textkörper der E-Mail'.

Wenn das Unternehmen Text- und Audio-Nachrichten speichern möchte, kann diese Klasse die Nachricht Ihrer Meinung nach speichern?

Nun, die Antwort ist nein?

Dies liegt daran, dass die E-Mail-Klasse die Parameter des Textes und der Audio-Nachrichten nicht verarbeiten kann. In solchen Fällen müssen Sie die Klasse neu erstellen. Jetzt ist es ziemlich mühsam, die Klasse neu zu erstellen, besonders wenn Sie es regelmäßig tun müssen. Wenn Sie stattdessen Dependency Injection verwenden, können Sie die Objekte zur Laufzeit ändern. Auf diese Weise müssen Sie die Klasse nicht neu erstellen, was Ihnen in vielerlei Hinsicht weiterhilft.

Wenn ich also die Vorteile der Abhängigkeitsinjektion zusammenfassen muss, sind die folgenden Vorteile:

Okay, jetzt, da Sie die Vorteile von Dependency Injection kennen, lassen Sie uns fortfahren und sehen, wie Dependency Injection mithilfe von Spring Boot implementiert wird.

Wie implementiere ich DI mit Spring Boot?

Schritt 1: Öffne dein Eclipse IDE und erstellen Sie eine Spring Boot-Anwendung durch Rechtsklick und Auswahl Frühlingsstarter-Projekt . Erwähnen Sie dann den Namen des Projekts und klicken Sie auf Fertig .

Um das Spring Starter-Projekt zu erhalten, müssen Sie die Spring Tool Suite vom Eclipse Marketplace installieren. Falls Sie Spring Too Suite nicht installiert haben, lesen Sie meinen Artikel über .

Sie sehen automatisch, dass eine Anwendungsdatei wie folgt erstellt wird.

Schritt 2: Erstellen Sie als Nächstes eine Klasse im selben Paket. Klicken Sie dazu mit der rechten Maustaste auf die Datei -> wählen Sie Klasse und erwähne die Klassenname. Dann klicken Sie auf Fertig . Dadurch wird ein erstellt Klasse Datei. Hier habe ich eine Kundenklasse erstellt. Siehe unten.

Schritt 3: Lassen Sie uns danach einige Eigenschaften für die Klasse eingeben. Nehmen wir also an, wir schließen ein Kunden-ID, Kundenname und Kursname. Erwähnen Sie den folgenden Code.

package com.example.demo // Paketname öffentliche Klasse Kunden {private int custid private String custname private String coursename}

Schritt 3.1: Sobald Sie damit fertig sind, müssen Sie generieren Getter- und Setter-Methoden für diese Eigenschaften. Wählen Sie dazu diese Eigenschaften aus und klicken Sie mit der rechten Maustaste. Dann wähle Quelle -> Generieren Sie Getter- und Setter-Methoden.

Ihr bisheriger Code sollte wie folgt lauten:

package com.example.demo public class Kunden {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename}}

Stellen Sie sich nun ein Szenario vor, in dem Sie ein Objekt für Kunden erstellen müssen und dies nicht manuell tun möchten. In einem solchen Szenario müssen Sie dann Dependency Injection verwenden, um die Objekte zu erhalten, wann immer Sie sie benötigen.

Lassen Sie uns als nächstes untersuchen, wie wir dasselbe erreichen können.

Schritt 4: Ändern Sie zuerst die Linie laufen lassen in dem Anwendungsklassendatei Zu dem Folgendem:

ConfigurableApplicationContext context = SpringApplication.run (DemoApplication.class, args)

Hinweis: Wenn Sie eine Fehlermeldung erhalten, importieren Sie Folgendes:

import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext

Diese obige Codezeile gibt zum Zeitpunkt der Ausführung ein Objekt zurück. Fügen Sie nun den folgenden Code in die Anwendungsdatei ein.

Kunden c = context.getBean (customers.class)

Die obige Zeile weist den Compiler an, ein Objekt der Kundenklasse zurückzugeben. Siehe unten.

Schritt 4.1: Um zu überprüfen, ob es funktioniert oder nicht, Sie kann zur Kundenklasse zurückkehren und fügen Sie eine Methode wie folgt hinzu:

public void display () {System.out.println ('Objekt erfolgreich zurückgegeben')}

Diese Methode zeigt bei erfolgreicher Ausführung die Ausgabe 'Objekt erfolgreich zurückgegeben' an.

wie man ein Array von Objekten in Java deklariert

Schritt 4.2: Als nächstes müssen Sie zur Anwendungsdatei zurückkehren und Folgendes erwähnen:

c.display ()

Dadurch rufen Sie das Objekt der Customers-Klasse mit einer Referenz der Anzeigemethode auf. In der folgenden Abbildung finden Sie den Code der Anwendungsklasse bis jetzt:

Wenn Sie nun das Projekt ausführen, sehen Sie eine Ausnahme von Keine qualifizierende Bean vom Typ . Dies liegt daran, dass die von Ihnen definierte Kundenklasse keine Spring Bean ist, d. H. Kein Spring Object. Siehe unten.

Schritt 4.3: Um dem Spring Container das mitzuteilen, benötigen wir ein Objekt der Kundenklasse. Dazu müssen Sie das erwähnen @ Komponentenanmerkung in der Kundenklasse. Der Code in der Customers-Klasse sollte wie folgt lauten:

Paket com.example.demo import org.springframework.stereotype.Component @Component public class Kunden {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname} public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ('Objekt erfolgreich zurückgegeben')}}

Dann, wenn Sie Kunden erwähnen c = context.getBean (customers.class) Der Compiler prüft, ob im Container eine Kunden-Bean verfügbar ist oder nicht.

Wenn die Bean verfügbar ist, injiziert das Spring-Framework das Kundenobjekt in Ihre Anwendung. Im Grunde genommen wird dieses Objekt vom Spring-Framework erstellt, das in der Anwendung weiter verwendet werden kann.

Wenn ich dieses Projekt jetzt ausführe, wird eine Ausgabe angezeigt, die das Objekt erfolgreich zurückgegeben hat. Siehe unten.

Auf diese Weise können Sie Dependency Injection implementieren.

Beispiel: Abhängigkeitsinjektion mit Autowired Annotation

wie man die tostring Methode benutzt

Ich hoffe, Sie haben verstanden, wie Dependency Injection in Spring Boot funktioniert. Lassen Sie uns nun dieses Beispiel erweitern und weiter sehen, wie eine von der anderen Klasse abhängige Klasse die Funktionen dieser Klasse in Spring Boot verwendet hat.

Schritt 1: Erstelle eine neue Klassendatei wieder vorbei Klicken Sie mit der rechten Maustaste auf das Paket und das durch wählen Neu -> Klasse. Erwähnen Sie nun den Namen der Klasse wie folgt und klicken Sie auf Fertig.

Schritt 2: Als nächstes fügen wir einige Eigenschaften für die Klasse ein. Nehmen wir also an, wir schließen ein TechID, Techname. Erwähnen Sie den folgenden Code.

Paket com.example.demo öffentliche Klasse Technologies {private int techid private String techname}

Schritt 2.1: Sobald Sie damit fertig sind, generieren Sie Getter- und Setter-Methoden Klicken Sie für diese Eigenschaften mit der rechten Maustaste auf die Datei und wählen Sie Quelle -> Generieren Sie Getter- und Setter-Methoden.

Schritt 3: Nehmen wir an, wir müssen eine Methode erstellen, die „ Erfolgreich “. Erwähnen Sie dazu den Code:

public void tech () {System.out.println ('Erfolgreich')}

Ihr bisheriger Code sollte wie folgt aussehen:

Paket com.example.demo public class Technologies {private int techid private String techname public int getTechid () {return techid} public void setTechid (int techid) {this.techid = techid} public String getTechname () {return techname} public void setTechname (String techname) {this.techname = techname} public void tech () {System.out.println ('Erfolgreich')}}

Schritt 4: Nun, um die anzurufen tech () Methode in dem Kundenklasse müssen Sie ein Objekt der Technologieklasse erstellen. Erwähnen Sie daher die folgende Codezeile in der Kundenklasse:

private Technologies techdetail

Schritt 4.1: Sobald Sie damit fertig sind, generieren Sie Getter- und Setter-Methoden für diese Eigenschaften von Klicken Sie mit der rechten Maustaste auf die Datei und dann wählen Quelle -> Generieren Sie Getter- und Setter-Methoden.

Schritt 5: Als nächstes verwenden Sie die tech () Methode muss man erwähnen techdetail.tech () unter dem Anzeigemethode der Kundenklasse . Um sicherzustellen, dass das Techdetail-Objekt instanziiert ist, wird ebenfalls erwähnt @ Komponentenanmerkung ist der Technologieklasse. Siehe unten.

Wenn Sie dieses Projekt ausführen, sehen Sie a Nullzeiger-Ausnahme . Das liegt daran, dass jetzt die Die Kundenklasse ist abhängig von der Technologies-Klasse und kennt die Existenz der Technologies-Klasse nicht .

Damit der Kunde die Technologies-Klasse erkennen kann, müssen Sie die Klasse einfügen @Autowired Annotation in der Kundenklasse. Ihr endgültiger Code der Kundenklasse sollte wie folgt lauten:

Paket com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Kunden {private int custid private String custname private String coursename @Autowired private Technologies techdetail public Technologies getTechdetail ( ) {return techdetail} public void setTechdetail (Technologies techdetail) {this.techdetail = techdetail} public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ( 'Objekt erfolgreich zurückgegeben') techdetail.tech ()}}

Sobald Sie diese Dateien ausgeführt haben, werden die Ausgaben als erfolgreich und erfolgreich zurückgegebenes Objekt angezeigt. Dies bedeutet, dass unsere Abhängigkeit von den Klassen erfüllt wurde. Siehe unten.

Nachdem Sie mit dem Artikel fertig sind, lesen Sie die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt.

Hast du eine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich von „Was ist Abhängigkeitsinjektion? Artikel und wir werden uns so schnell wie möglich bei Ihnen melden.