2016-06-23 5 views
0

Ich bin etwas verwirrt über die Autowiring und Frühjahr Abhängigkeit Injektion.Ist Autowiderstand Konflikte der Federabhängigkeit Injektion

Mithilfe der Spring-Abhängigkeitsinjektion können Sie alle spezifischen Abhängigkeiten einer Klasse in anderen Klassen oder Interfaces von Drittanbietern entfernen und diese Abhängigkeiten zur Konstruktionszeit in die Klasse laden.

Aber während der Verwendung von Autowired-Annotation schreiben wir programmatisch den Schnittstellennamen oder den Klassennamen in die Java-Klasse, um Bean zu injizieren.

@Autowired 
public final Interface object; 

Ist dies nicht widersprüchlich die Federabhängigkeit Injektion? Denn wenn wir Bean in XML definieren, können wir es jederzeit ändern, ohne den eigentlichen Java-Code zu ändern. Aber mit Annotation müssen wir den Java-Code ändern.

+1

"ermöglicht es Ihnen, alle spezifischen Abhängigkeiten zu entfernen, die eine Klasse in anderen Klassen oder Interfaces von Drittanbietern haben kann": Nein. Sie entfernen Abhängigkeiten von konkreten Implementierungen, was bedeutet, dass es sich um einen Subtyp von dem handelt, was Sie automatisch ansteuern. Genau wie bei XML config (der einzige Unterschied ist das Fehlen der '@ Autowired' Annotation in Ihrem Code). – zapl

+0

@Autowired (technisch als Component Scan bezeichnet) und alte XML-Konfiguration sind das gleiche Ergebnis. Du solltest also nur eins benutzen. Wählen Sie weise, abhängig von Ihrem Anwendungstyp. –

Antwort

0

In Abhängigkeitsinjektion Spring erfordert mindestens einen Vertrag (Java Interface) in der Klasse und Sie können die Implementierung zur Laufzeit dynamisch mit XML- oder Java-basierter Annotation wechseln. Selbst wenn dies über XML erfolgt, müssen wir die Schnittstelle mit Konstruktoren bereitstellen, damit die Bean-Verbindung automatisch auch diese Schnittstellenklassenvariable benötigt.

Aber wie Sie gesagt haben, Java-basierte Annotation setzen müssen wir den Zugriff auf den Quellcode haben, und dies ist eine Art von Hauptnachteil mit Annotation. Das kommt auch für AOP. Um eine Klasse zu einem Aspekt zu machen, benötigen Sie den Quellcodezugriff.