Конфигурационный файл Spring с тем же бином и разными свойствами - PullRequest
0 голосов
/ 09 июня 2011

У меня есть бин, который я использую для загрузки кэша. Я даю ключ для кеша от Spring впрыска. Я дублирую один и тот же компонент только для свойства, а Spring создает несколько экземпляров одного компонента. Могу ли я в любом случае использовать один экземпляр компонента?

<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 Ответ

3 голосов
/ 09 июня 2011
<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> 

Вам, очевидно, нужен один и тот же компонент дважды с двумя разными конфигурациями.Поэтому, даже если бы было возможно объединить его в одном бине, это было бы полной болью (вы могли бы, например, использовать ThreadLocals для установки свойства по мере необходимости и т. Д.)

Я бы сказал, измените свой дизайн.Если com.temp.ehCache.interceptor.CacheLoader тяжелый, попробуйте извлечь тяжелый материал в bean-компонент делегата, который может использоваться bean-компонентом CacheLoader.Держите бины CacheLoader как можно меньше, и не будет проблем с наличием более одного из них (если вы не используете автоматическую разводку по типу).

...