我们可以在XMl文件中替换Springframework注释(@ CacheConfig,@ Caches,@ CachePut)吗?

问题描述 投票:0回答:1

我正在实现一个带有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

spring spring-cache spring-framework-beans
1个回答
0
投票

我找到了答案。我们可以将以下内容放在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文件中。

© www.soinside.com 2019 - 2024. All rights reserved.