我正在用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;
}
但是正如我之前所说,我不想在Java代码中放入缓存名称“ NetworkEntity”,而是希望在applicationcontext.xml文件中放入相同的名称。可能吗?
此外,可以省略Java文件中的所有注释吗?如果我只使用AbstractApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
,是否有可能在applicationContext.xml文件中提及要在其中应用@Cacheable注释的方法有哪些,例如
我搜索了很多东西,在任何地方都找不到。
谢谢 尼尔玛利亚
答案 0 :(得分: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>
在这种情况下,我们不需要在Java文件中放置@ CacheConfig,@ CachePut等注释。