나는 Spring에 다음과 같은 문제가있다 : 나는 싱글 톤이 한 번 생성 된 다음 Spring 캐시에서 참조 될 것으로 예상했다. 하지만 그럴 것 같지 않습니다.Spring이 새로운 객체를 생성하지만하지 말아야한다
<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
비운됩니다 내 beans.xml 환경에서 다음과 같은 라인을 가지고 때때로 신비한 방법으로! 즉, 나는 그것이 실제로 비어 있다고 생각하지 않는다. 나는 단지 다른 클래스의 ManuallyCachingDAO
을 참조하면 그냥 삭제되고 다시 작성된 것 같습니다.
이 문제를 해결하는 방법을 알려주시겠습니까?
편집 : 로빈의 힌트에 : 나는 (모두는 아니지만) 많은 클래스에서 콩을 얻으려면 다음을 수행하십시오
ClassPathResource blah = etc.;
XmlBeanFactory xbf = new XmlBeanFactory(blah);
...
xbf.getBean("Cache");
... 지금 내가도에 대한 (그것을하고 있어요 다른 콩을 많이) ... 그것은 매우 어리 석거나 아주 나쁜 생각입니까 아니면 둘 다입니까? 나는 지금 내가 잘못하고있는 일이 나에게 일어난다 고 생각한다. 지금까지, 나는 모든 XmlBeanFactory가 어쨌든 매우 바보 일 수도 있고 또는 옳은 것을 말해 줄 수있는 동일한 리소스를 잡는다고 의심했다.
init() 메서드를 표시하십시오 –
당신이 생각하는 것이 실제로 발생하고 있음을 입증해야합니다. 디버거 또는 System.out을 사용하여 "싱글 톤"에 대한 참조가 실제로 변경되는지 확인하십시오. 확실히 알지 못하면 쉽게 결정할 수 있습니다. 야생 거위 추격을 할 수도 있습니다. – rfeak
맵의 해시 코드가 동일한 인스턴스인지 확인하십시오. 구성에 문제가없는 것으로 보입니다. – Eric