Wenn die Abhängigkeitsauflösung von einem externen Agenten und nicht von der Klasse selbst vorgenommen wird, wird dies als Abhängigkeitsinjektion bezeichnet. Es gibt zwei Standardmethoden der Abhängigkeitsinjektion, die im Spring-Framework unterstützt werden, über ein Konstruktorargument oder über die Setter-Methode. Die erstere Art der Abhängigkeitsinjektion wird als Konstruktorinjektion bezeichnet und die letztere wird als Setterinjektion bezeichnet. Beide Methoden werden für unterschiedliche Zwecke verwendet und haben ihre eigenen Vor- und Nachteile.
Konstruktor-Injektion vs. Setter-Injektion
Der Unterschied zwischen der Constructor-Injektion und der Setter-Injektion besteht darin, dass die Konstruktor-Injektion den Konstruktor verwendet und die Setter-Injektion andererseits Setter-Methoden verwendet, um Abhängigkeiten zu injizieren. Diese beiden Arten von Injektionswegen unterscheiden sich auf der Grundlage mehrerer Parameter wie Sicherheit, Lesbarkeit, Unterstützung der Unveränderlichkeit usw.
Die Konstruktorinjektion ist eine Art der Abhängigkeitsinjektion im Frühjahrsframework, die einen Konstruktor zum Injizieren von Abhängigkeiten verwendet. Die Abhängigkeiten, die für jede der Klassen erforderlich sind, werden als Parameter des Konstruktors dieser spezifischen Klasse angegeben. Die Konstruktorinjektion erlaubt dem Entwickler nicht, ein Objekt zu konstruieren, es sei denn, alle Abhängigkeiten sind bereit, und stellt somit eine erfolgreiche Abhängigkeitsinjektion sicher.
Die Setter-Injektion ist eine Art der Abhängigkeitsinjektion im Spring-Framework, die Setter-Methoden zum Injizieren von Abhängigkeiten verwendet. Es hat Setter-Methoden der Form setXXX(), wobei XXX eine Abhängigkeit bezeichnet, die die abhängigen Objekte in den Client injiziert. Diese Methode zum Auflösen von Abhängigkeiten ist im Spring-Framework weit verbreitet.
Vergleichstabelle zwischen Constructor Injection und Setter Injection
Vergleichsparameter | Konstruktor-Injektion | Setter-Injektion |
Abhängigkeit injiziert | Es verwendet einen Konstruktor. | Es verwendet Setter-Methoden. |
Lesbarkeit | Es ist im Vergleich zum Setter nicht viel lesbar. | Es ist lesbarer. |
Eigenschaft überschreiben | Abhängigkeit kann nicht überschrieben werden. | Kann bestimmte Abhängigkeiten überschreiben. |
Änderungen | Es erstellt immer eine neue Bean-Instanz. | Es erstellt keine neue Bean-Instanz. |
Unveränderlichkeit | Es unterstützt Unveränderlichkeit. | Es unterstützt nicht. |
Was ist Konstruktorinjektion?
Die Konstruktorinjektion ist eine der Standardmethoden zum Auflösen von Abhängigkeiten innerhalb des Spring-Frameworks, das die Liste der für Klassen erforderlichen Abhängigkeiten statisch definiert, indem diese dem Konstruktor der Klasse als Parameter zugewiesen werden. Alle Klassen, die eine Abhängigkeit erfordern, müssen einen öffentlichen Konstruktor enthalten, der eine Instanz als Konstruktorargument verwendet, und dieser Konstruktor sollte notwendigerweise der einzige öffentliche Konstruktor innerhalb dieser Klasse sein.
Wenn mehr als eine Abhängigkeit erforderlich ist, sollten die zusätzlichen Argumente demselben Konstruktor hinzugefügt werden. Um sicherzustellen, dass die Abhängigkeit vollständig injiziert wird, sollte ein einheitliches Verantwortungsprinzip befolgt werden, das besagt, dass die Mitglieder nur eine Sache tun sollen. Der Konstruktor sollte von jeglicher anderer Logik freigehalten werden, um den Konstruktor der Klassen schneller und zuverlässiger zu machen.
Eine wichtige Tatsache bei der Konstruktorinjektion ist, dass die Objekte nicht erstellt werden, wenn nicht alle Abhängigkeiten bereit sind. Da jedes Mal, wenn der Konstruktor aufgerufen wird, neue Instanzen erstellt werden, ist ein Überschreiben darin nicht möglich. Die Konstruktorinjektion wird grundsätzlich in Fällen verwendet, in denen Objekte mit allen Abhängigkeiten erstellt werden müssen. Dies ist der allgemeinste und einfachste Weg, Abhängigkeiten korrekt zu implementieren.
Was ist Setter-Injektion?
Die Setter-Injektion ist eine der Standardmethoden zum Auflösen von Abhängigkeiten innerhalb des Spring-Frameworks, das die Setter-Methoden verwendet, um die Abhängigkeiten aufzulösen. Die Setter-Methoden haben die Form setXXX(), wobei XXX die einzufügende Abhängigkeit angibt. Bei dieser Art der Injektionsmethode wird zuerst das Objekt erstellt und später die Abhängigkeit eingefügt. Für die Konfiguration von Spring werden XML-Dateien verwendet, daher ist die Lesbarkeit ein großes Anliegen.
Da Setter-Methoden eine bestimmte Form von Methodennamen haben, verbessert dies die Lesbarkeit in vielerlei Hinsicht. Wenn eine größere Anzahl von Abhängigkeiten injiziert werden muss, wird der Setter-Injektionstyp sehr bevorzugt und gegenüber anderen Injektionsverfahren bevorzugt. Darüber hinaus können die Entwickler durch die Verwendung von Setter Injection die Werte einfach überschreiben und ändern, da nicht jedes Mal eine neue Bean-Instanz erstellt wird. Der einzige Nachteil der Setter-Injektion besteht darin, dass sie keine vollständige Abhängigkeitsinjektion gewährleistet.
Es gibt keine Garantie dafür, ob ein bestimmtes Objekt Abhängigkeitsinjektionen hat oder nicht. Anders ausgedrückt bedeutet dies, dass möglicherweise ein Objekt mit unvollständiger Abhängigkeit vorhanden ist. Die Setter-Injektion ist die flexibelste und gebräuchlichste Methode zur Implementierung von Dependency Injection.
Hauptunterschiede zwischen Constructor Injection und Setter Injection
Abschluss
Die Quintessenz ist, dass beide Möglichkeiten zum Injizieren von Abhängigkeiten entweder Konstruktor-Injektion oder Setter-Injektion sein können, ihre eigenen Vor- und Nachteile haben. Darüber hinaus verzichtet Spring nicht darauf, dass die Entwickler außer Rater verwenden. Sie können sowohl Konstruktorinjektion als auch Setterinjektion in einer Spring-Konfigurationsdatei verwenden. Beim Injizieren von Abhängigkeiten ist es wichtig, die Konstruktor-Injektion zu verwenden, wenn zwingend Objekte mit allen Abhängigkeiten erstellt werden müssen, und die Setter-Injektion zu verwenden, wenn die Anzahl der Abhängigkeiten größer ist oder wenn eine Verbesserung erforderlich ist Lesbarkeit.
Verweise
- https://digitalcommons.calpoly.edu/csse_fac/34/
- https://books.google.com/books?hl=de&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE