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:
codice:
<context:component-scanbase-package="com.prove"/>
e ho le seguenti classi:
Classe A
codice:
package com.prove.prove1
@Component
Class A {
@Autowired
B b;
public A() {
b.faiQuesto();
}
}
Classe B
codice:
package com.prove.prove1
import com.prove.prove2.C;
@Service
Class B {
@Autowired
C c;
public void faiQuesto() {
c.faiQuello();
}
}
Classe C
codice:
package com.prove.prove2
@Service
Class C {
public void 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.
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
codice:
package com.prove.prove1
@Component
Class A {
B b;
public A() {
b = B.getInstance();
b.faiQuesto();
}
}
Classe B
codice:
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();
}
}
Classe C
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() {
.............
}
}
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?
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