Ich gebe eine Spring-Bean in eine abstrakte Klasse und es scheint, dass es nicht funktioniert. Hier ist eine Erklärung, was ich mache, wenn es nicht genug ist, kann ich den Beitrag bearbeiten und etwas Code hinzufügen:
Ergebnis - es funktioniert nicht.
Dann habe ich versucht, die injizierte Bean aus der abstrakten Klasse in die zwei Unterklassen zu verschieben. Jetzt funktioniert es.
Also, habe ich etwas falsch gemacht, oder ist es theoretisch unmöglich, eine Bean mit Spring 3 und Java EE 5 in eine abstrakte Klasse zu injizieren?
Ist es theoretisch unmöglich, eine Bean mit Spring 3 und Java EE 5 in eine abstrakte Klasse zu injizieren?
Dependency Injection geschieht auf einem Objekt, nicht auf seiner Klasse. Spring fügt Abhängigkeiten in verwaltete Beans ein, bei denen es sich um bereits von Spring instantiierte Objekte handelt. Da eine abstrakte Klasse nicht instanziiert werden kann, wäre es konzeptionell falsch, hier über DI nachzudenken.
Sie können auch eine nicht abstrakte Klasse als abstrakte Spring-Bean definieren, indem Sie dem abstract=true
-Tag das Attribut <bean>
hinzufügen. Dies zeigt an, dass die Bean nicht instanziiert werden würde und als eine bloße Vorlage von Eigenschaften dienen würde, die andere Beans über die Bean-Vererbung verwenden können (was überhaupt nicht mit Java-Vererbung zusammenhängt).
Auch in diesem Kontext (wenn Sie es konfiguriert haben) würde die Abhängigkeitsinjektion nur für die untergeordneten Beans und nicht für ihre Eltern-Bean erfolgen, da sie als abstrakt definiert wurde. (Anmerkung: Es ist nicht zwingend erforderlich, dass die Parent-Bean abstrakt ist, aber es ist sinnvoll, dies zu tun, wenn sie nur als eine Menge allgemeiner Eigenschaften von Beans fungiert.)
Tags und Links spring dependency-injection java-ee-5