Salve a tutti, sto provando ad usare le annotation in spring e la classi con @Autowired ma sto avendo dei problemi.
Nel file XML del context ho inserito questo:
e ho le seguenti classi:codice:<context:component-scanbase-package="com.prove"/>
Classe A
Classe Bcodice:package com.prove.prove1 @Component Class A { @Autowired B b; public A() { b.faiQuesto(); } }
Classe Ccodice:package com.prove.prove1 import com.prove.prove2.C; @Service Class B { @Autowired C c; public void faiQuesto() { c.faiQuello(); } }
Quello che io vorrei � che all'avvio del server (installato su tomcat7) venga avviata la classe A che in cascata utilizzi B e C.codice:package com.prove.prove2 @Service Class C { public void faiQuello() { ............. } }
Quello che invece capita � che all'avvio il costruttore della classe A viene istanziato in automatico ma quando chiamo b.faiQuesto(); ho un null pointer exception; da quello che ho letto con gli @Autowired posso usare delle classi senza istanziarle, � corretto?
Il tutto funziona, invece, se utilizzo quest'altro sistema:
Classe A
Classe Bcodice:package com.prove.prove1 @Component Class A { B b; public A() { b = B.getInstance(); b.faiQuesto(); } }
Classe Ccodice:package com.prove.prove1 import com.prove.prove2.C; Class B { C c; private static B b = null; public static B getInstance() { if (b == null) b = new B(); return b; } public void faiQuesto() { c = C.getInstance(); c.faiQuello(); } }
Al di la di voler imparare ad usare gli @Autowired la gestione con i singleton (che funziona) e' comunque un modo corretto di implementare le classi in un server spring?codice:package com.prove.prove2 Class C { private static C c = null; public static C getInstance() { if (c == null) c = new B(); return c; } public void faiQuello() { ............. } }
Tra le due soluzioni preferirei cmq approfondire quella con le annotation e gli @Autowired (riuscendo quindi a far funzionare in maniera corretta e pulita il caso 1) ) quindi qualsiasi aiuto sara' ben accetto!
Grazie in anticipo!
Sandro

Rispondi quotando

