injiziere Bohnen in eine abstrakte Klasse mit Spring und Java ee 5

8

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:

  1. implementieren Sie den Java-Code - 1 abstrakte Klasse, 2 Klassen, die von ihr erben, und die Bean, die injiziert und in der abstrakten Klasse und damit von den Unterklassen verwendet werden soll.
  2. Definieren Sie die Bean in der Spring-Konfiguration.
  3. Definieren Sie die abstrakte Klasse und 2 Unterklassen in der Spring-Konfiguration.
  4. definiert die erste Bean als eine Eigenschaft der abstrakten Klassen-Bean.

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?

    
user1414745 14.05.2013, 12:26
quelle

1 Antwort

11
  

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.)

    
Ravi Thapliyal 14.05.2013, 12:29
quelle