2013-05-14 4 views
8

Sto iniettando un bean spring-managed in una classe astratta e sembra che non funzioni. Ecco una spiegazione di quello che faccio, se non basta, posso modificare il post e aggiungere del codice:inietti i fagioli in una classe astratta con spring e java ee 5

  1. attuare il codice Java - 1 classe astratta, 2 classi che ereditano da esso e il fagiolo a essere iniettato e usato nella classe astratta e quindi dalle sottoclassi.
  2. definire il bean nella configurazione di primavera.
  3. definisce la classe astratta e 2 sottoclassi nella configurazione di primavera.
  4. definisce il primo bean come una proprietà del bean di classe astratto.

risultato: non funziona.

Poi ho provato a spostare il fagiolo iniettato dalla classe astratta nelle due sottoclassi. Ora funziona.

Quindi, ho fatto qualcosa di sbagliato o è teoricamente impossibile iniettare un bean in una classe astratta con spring 3 e Java EE 5?

risposta

11

È teoricamente impossibile iniettare un bean in una classe astratta con spring 3 e Java EE 5?

L'iniezione di dipendenza si verifica su un oggetto non sulla sua classe. Spring inietta le dipendenze nei bean gestiti che sono oggetti già istanziati da Spring. Dal momento che una classe astratta non può essere istanziata, sarebbe concettualmente sbagliato pensare a DI qui.

Su una nota un po 'correlata, è anche possibile definire una Classe non astratta come un bean Spring astratto aggiungendo l'attributo abstract=true al tag <bean>. Ciò indica che il bean non sarebbe istanziato e servirebbe da semplice template di proprietà che altri bean possono usare attraverso l'ereditarietà dei bean (che non è affatto correlato all'ereditarietà di Java).

Anche in questo contesto, (se lo hai configurato) l'Iniezione di Dipendenza si verifica solo per i bean figlio e non per il bean parent poiché è stato definito come astratto. (Nota: non è obbligatorio che il bean parent sia astratto ma ha senso farlo quando tutto ciò che fa è agire come un insieme di proprietà common bean.)

+0

Grazie per la risposta. Ma ho letto, che DI è possibile in classi astratte in Java EE 6, giusto? – user1414745

+0

La proprietà che si sta iniettando potrebbe essere definita nella classe astratta ma l'iniezione avverrà solo su un oggetto che implica che si tratta di un oggetto di classe secondaria. –