Enthüllung der Nuancen des Frühlings @Autowired: Ein umfassender Leitfaden
Im Reich des Frühlings steht @Autowired als kraftvolle Anmerkung, die vereinfacht Bean-Wiring, wodurch Entwicklern die manuelle Konfiguration von XML-Dateien erspart bleibt. Allerdings kann es für Uneingeweihte eine verwirrende Aufgabe sein, die komplizierten Funktionsweisen zu verstehen.
Beispielanalyse
Bedenken Sie die bereitgestellten Codebeispiele:
public class SimpleMovieLister { private MovieFinder movieFinder; @Autowired public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } } public class MovieRecommender { private MovieCatalog movieCatalog; private CustomerPreferenceDao customerPreferenceDao; @Autowired public void prepare(MovieCatalog movieCatalog, CustomerPreferenceDao customerPreferenceDao) { this.movieCatalog = movieCatalog; this.customerPreferenceDao = customerPreferenceDao; } }
In diesen Beispielen fügt @Autowired Bean-Abhängigkeiten in Felder oder Setter-Methoden ein. Durch die Angabe, dass Beans automatisch verdrahtet werden sollen, erkennt Spring automatisch die erforderlichen Beans und ordnet sie zu, wodurch Entwickler von der expliziten Bean-Verkabelung entlastet werden.
Autowiring verstehen
Um die automatische Verdrahtung zu aktivieren, führt Spring aus Scannen von Komponenten basierend auf dem bereitgestellten Basispaket, wobei annotierte Klassen (z. B. @Component, @Controller) als potenzielle Beans erkannt werden. Während des Scanvorgangs werden @Autowired-Annotationen identifiziert, die Eigenschaften oder Methoden als Injektionspunkte markieren.
Wenn Beans erstellt werden, durchläuft Spring die Autowired-Eigenschaften oder -Methoden und sucht nach Beans passender Typen. Wenn mehrere Beans desselben Typs vorhanden sind, wird eine Ausnahme ausgelöst, es sei denn, @Qualifier wird verwendet, um die gewünschte Bean anzugeben.
Autowiring-Beispiele
Um Autowiring-Szenarien zu veranschaulichen, berücksichtigen Sie Folgendes: Das folgende Beispiel:
interface Color { void design(); } class Red implements Color { @Override public void design() { // Red design logic } } class Blue implements Color { @Override public void design() { // Blue design logic } } class MainClass { @Autowired private Color color; public static void main(String[] args) { MainClass mainClass = new MainClass(); mainClass.color.design(); // Red or Blue? } }
In diesem Beispiel implementieren sowohl Rot als auch Blau die Farbschnittstelle. Die Annotation @Autowired auf MainClass.color gibt an, dass Spring automatisch eine Instanz der Color-Schnittstelle einfügen soll. Ohne weitere Anleitung kann Spring jedoch nicht bestimmen, welche spezifische Implementierung eingefügt werden soll.
Um diese Mehrdeutigkeit zu beseitigen, müssen @Qualifier- oder @Resource-Annotationen genutzt werden:
Verwendung von @Qualifier
@Qualifier("redBean") class Red implements Color {} @Qualifier("blueBean") class Blue implements Color {}
Bei Verwendung in MainClass schränkt @Qualifier die Autowiring-Auswahlmöglichkeiten ein und stellt so sicher, dass die Red-Implementierung erfolgt wird verwendet.
Verwendung von @Resource
@Resource(name="redBean") private Color color;
@Resource kombiniert die Annotationen @Autowired und @Qualifier und fügt die Bean mit dem Namen „redBean“ ein.
Best Practices
Für optimale Autowiring-Praktiken Beachten Sie diese Richtlinien:
Das obige ist der detaillierte Inhalt vonWie funktioniert die @Autowired-Annotation von Spring und welche Best Practices gibt es für deren Verwendung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!