Можем ли мы заменить аннотации Springframework (@CacheConfig, @Cacheable, @CachePut) в файле XMl? - PullRequest
0 голосов
/ 21 марта 2019

Я реализую модуль с механизмом Spring Cache. Модуль является общим и может кэшировать различные типы объектов. Поэтому я не хочу менять код Java и хочу, чтобы пользователь соответствующим образом настроил файл applicationcontext.xml. Он может поместить имена различных типов сущностей в applicationcontext.xml, и код должен работать. Например, -

<context:annotation-config/>
<cache:annotation-driven cache-manager="cacheManager"/>
<context:component-scan base-package="com.nokia.oss.sure.adapter"/>

<bean id="NetworkEntityService" class="com.nokia.oss.sure.adapter.cache.NetworkEntityServiceImpl"/>

<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
    <property name="caches">
        <set>
            <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" name="NetworkEntity"/>
        </set>
    </property>
</bean>

Он может изменить NetworkEntity на ServiceEntity и т. Д.

Так что в коде Java мне нужно упомянуть -

@CacheConfig(cacheNames={"NetworkEntity"})

Или я могу поставить то же самое для каждого метода -

@CachePut(cacheNames="NetworkEntity", key="#entity.sureName")
public Entity addEntity(Entity entity) {
    return entity;
}

Но, как я уже говорил ранее, я не хочу помещать имя кэша "NetworkEntity" в код Java, но хочу добавить его в файл applicationcontext.xml. Является ли это возможным?

Кроме того, можно ли опустить все аннотации в файле Java? Если я просто использую AbstractApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");, можно ли упомянуть в файле applicationContext.xml, какие методы я хочу применить для аннотации @Cacheable, например,

Я много искал, нигде не мог его найти.

Спасибо Nirmalya

1 Ответ

0 голосов
/ 22 марта 2019

Я узнал ответ.Мы можем поместить в applicationContext.xml следующее:

<!-- define caching behavior -->
    <cache:advice id="cacheAdviceInterface" cache-manager="cacheManager">
        <cache:caching cache="NetworkEntity">
            <cache:cacheable method="getEntity"/>
            <cache:cache-put method="putEntity"/>
        </cache:caching>
    </cache:advice>

. В этом случае нам не нужно помещать аннотации @CacheConfig, @CachePut и т. Д. В файл Java.

...