metoda initialize se opravdu vola pri startu aplikace a metoda getFromCache az dlouho potom.
Dne 2. září 2009 17:35 Tomas Hubalek <[email protected]> napsal(a): > 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 > >
