Podle me ji nikdo nenulluje, ale metoda initialize se zavola jindy, nez
si myslis. V tomto smyslu je IMHO debugger nanic, doporucuju dat vypis
do initialize() a do getFromCache() na uvidis.
Tom
________________________________
From: [email protected]
[mailto:[email protected]] On Behalf Of danisevsky
Sent: Wednesday, September 02, 2009 8:15 AM
To: Java
Subject: Spring - singleton beana
Ahoj, narazil jsem podle mne na zajimavou vec. Mam definovanou
beanu:
<bean id="someCache" class="cz.somepackage.SomeCache"
init-method="initialize" autowire="byType" />
zjednoduseny kod beany:
public class SomeCache {
private Map<String, List<String>> cache;
/**
* Provede inicializaci.
*/
@Transactional
public void initialize() {
cache = new HashMap<String, List<String>>();
putSomethigToCache(); //metoda neco z DB vlozi do
cache
}
public final List<String> getFromCache(String someId) {
return cache.get(someId);
}
}
Co me prekvapilo, ze radek "return cache.get(someId);" vyhodi
NPE vyjimku, ze objekt cache je null. Pritom vim bezpecne (mel jsem tam
breakpoint), ze metoda initialize() byla pri startu aplikace zavolana.
Myslel jsem, ze defaultne jsou Spring beany singletony, tedy
jedna instance pro celou aplikaci. Nechapu, jak promenna cache muze byt
null, kdyz v cele tride SomeCache nikde zadnej takovej kod, kterej by ji
nuloval neni. Mohl by mi to prosim nekdo vysvetlit?
Diky