Spring配置文件具有相同的bean和不同的属性

时间:2011-06-09 14:52:54

标签: java spring spring-aop

我有一个用于加载缓存的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> 

1 个答案:

答案 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尽可能小,并且不止一个是没有问题(只要你不按类型使用自动装配)。