У меня возникла следующая проблема со Spring: я ожидал, что синглтоны будут созданы один раз, а затем на них будут ссылаться из кеша Spring.Но, похоже, это не так.В моем файле beans.xml есть следующие строки:
<bean id="Cache" class="java.util.HashMap" scope="singleton" >
</bean>
, на которые ссылаются ниже, например:
<bean id="ManuallyCachingDAO" class="blah"
scope="singleton" init-method="init" destroy-method="destroy">
<property name="cache" ref="Cache"></property>
...
и в ManuallyCachingDAO код:
public Object get(int id) {
Object o = cache.get(id);
if (o != null) {
return o;
}
// ... code for retrieving the object from the DB
}
но HashMap
иногда очищается таинственным образом!То есть я не думаю, что это на самом деле опустошено.Я думаю, что он просто отбрасывается и создается заново, когда я ссылаюсь на ManuallyCachingDAO
в другом классе.
Не могли бы вы рассказать мне, как решить эту проблему?
РЕДАКТИРОВАТЬ: Подсказка Робина: я делаю следующее, чтобы получить бины во многих классах (хотя не во всех):
ClassPathResource blah = etc.;
XmlBeanFactory xbf = new XmlBeanFactory(blah);
...
xbf.getBean("Cache");
... сейчас я делаю это (даже для многих других бобов) ... это очень глупая или очень плохая идея или и то и другое?Я думаю, что сейчас мне приходит в голову то, что я делаю неправильно ... До сих пор я просто подозревал, что все XmlBeanFactories каким-то образом захватывали одни и те же ресурсы, которые, возможно, действительно были очень глупыми, или могли сказать мне, что правильно?