Ich habe eine Frage im Zusammenhang mit Spring Annotationen. In meinem (Lern-) Projekt habe ich zwei Klassen und eine andere Klasse definiert, die zwei Eigenschaften haben, eine von jeder dieser Arten. Um einen Fehler zu generieren, habe ich zwei Beans des gleichen Klassentyps in der XML definiert, und ich habe die Annotation @Autowired in Setter-Methoden verwendet. Etwas wie folgt aus:Spring Anmerkungen nach Name
<bean id="classA" class="beans.ClassA"></bean>
<bean id="otherclassA" class="beans.ClassA"></bean>
<bean id="classB" class="beans.ClassB"></bean>
public class UpperClass{
private ClassA classA;
private ClassB classB;
@Autowired
public void setClassA(ClassA classA){this.classA = classA}
@Autowired
public void setClassB(ClassB classB){this.classB = classB}
/* .
.
.
*/
}
In der Hauptklasse, erhalte ich eine Instanz der Application für diese Bohne, und drucken den Inhalt der Eigenschaften der toString Methode überschrieben, einen einfachen Test. Ich habe gelesen, dass Spring Autowired Annotation sucht nach den Beans nach Typ, so dass der Test fehlschlagen sollte, weil es zwei Beans der ClassA-Klasse definiert sind, aber es funktioniert. Es funktioniert auch mit @Resource Annotation ohne einen Namen darin zu verwenden.
Ich verwende Spring Version 4. Ich habe die ID der Beans so geändert, dass sie nicht mit den Namen der Klassen/Setter übereinstimmt, und es schlägt wie erwartet fehl.
Kann mir jemand sagen warum, oder was mache ich falsch? Sucht Spring nachName, wenn die Beans nicht nach Typ gefunden werden können?
Versuchen Sie, die ID der ersten Bean in Ihrem XML zu ändern und zu sehen, was passiert. – Jason
Ich habe gesehen, dass wenn Sie die Klasse statt der Bean-ID ändern, müssen Sie nicht nur den Namen des Setter-Parameters ändern, um den Fehler zu erhalten, sondern auch den Namen der Setter-Methode ändern, damit er nicht mit der Bean-ID übereinstimmt. – jgonzal