我有一个用于加载缓存的bean。我给出了Spring注入缓存的密钥。我正在为属性复制相同的bean,而Spring正在创建同一个bean的多个实例。无论如何我可以使用bean的一个实例吗?
<aop:config>
<aop:pointcut id="terminalPointcut"
expression="execution(* *..TerminalDao.getTerminals())" />
<aop:pointcut id="miscPointcut"
expression="execution(* *..MiscDao.getMiscTableList(*))" />
<aop:pointcut id="errorPointcut"
expression="execution(* *..ErrorDao.getErrorList())" />
<aop:advisor id="terminalCacheLoaderAdvisor"
advice-ref="terminalCacheLoaderAdvice" pointcut-ref="terminalPointcut" />
<aop:advisor id="miscCacheLoaderAdvisor"
advice-ref="miscCacheLoaderAdvice" pointcut-ref="miscPointcut" />
<aop:advisor id="errorCdDetailCacheLoaderAdvisor"
advice-ref="errorCacheLoaderAdvice" pointcut-ref="errorPointcut" />
</aop:config>
<bean id="miscCacheLoaderAdvice" class="com.temp.ehCache.interceptor.CacheLoader">
<property name="cacheManager" ref="simpleCacheManager" />
<property name="cache_data_key" value="MISC_DATA_KEY" />
</bean>
<bean id="errorCacheLoaderAdvice" class="com.temp.ehCache.interceptor.CacheLoader">
<property name="cacheManager" ref="simpleCacheManager" />
<property name="cache_data_key" value="ERROR_DATA_KEY" />
</bean>
答案 0 :(得分:3)
<bean id="miscCacheLoaderAdvice" class="com.temp.ehCache.interceptor.CacheLoader">
<property name="cacheManager" ref="simpleCacheManager" />
<property name="cache_data_key" value="MISC_DATA_KEY" />
</bean>
<bean id="errorCacheLoaderAdvice" class="com.temp.ehCache.interceptor.CacheLoader">
<property name="cacheManager" ref="simpleCacheManager" />
<property name="cache_data_key" value="ERROR_DATA_KEY" />
</bean>
你显然需要两个不同配置的同一个bean。因此,即使可以将它组合在一个bean中,也会产生很大的痛苦(例如,您可以使用ThreadLocals根据需要设置属性等)。
我会说改变你的设计。如果com.temp.ehCache.interceptor.CacheLoader
很重,请尝试将重要内容提取到可由CacheLoader
bean使用的委托bean。保持CacheLoader
bean尽可能小,并且不止一个是没有问题(只要你不按类型使用自动装配)。