有人可以通過Spring
xml來構建並注入Google番石榴的CacheBuilder
到一個依賴bean嗎?通過Spring向谷歌注入Google番石榴緩存生成器
一概而論,我需要在Spring
一些例子,說明了使用生成器模式對象的建設。
有人可以通過Spring
xml來構建並注入Google番石榴的CacheBuilder
到一個依賴bean嗎?通過Spring向谷歌注入Google番石榴緩存生成器
一概而論,我需要在Spring
一些例子,說明了使用生成器模式對象的建設。
雖然有可能call arbitrary methods in Spring XML using the factory-method
attribute,你會發現它幾乎是不可能的生成器,圖案風格鏈式調用。
相反,使用這種複雜的場景一個FactoryBean
或Java-based container configuration。恐怕,XML不會讓你走得太遠。
隨着在未來番石榴版本加入CacheBuilderSpec(12版),你就可以創建一個XML格式的CacheBuilder
豆,使用CacheBuilder.from(String spec)靜態工廠方法。
它應該是這樣的:
<bean id="legendaryCacheBuilder"
class="com.google.common.cache.CacheBuilder"
factory-method="from">
<constructor-arg value="maximumSize=42, expireAfterAccess=10m, expireAfterWrite=1h" />
</bean>
你甚至可以外部化配置字符串轉換成屬性文件,使用Spring的PropertyPlaceholderConfigurer
。
在此之前,你應該使用肖恩·帕特里克·弗洛伊德的解決方案(這也有類型安全的優勢)。
也想補充一點,你可以直接使用緩存規格的緩存管理器,如果你不感興趣的不同緩存建設者不同的緩存。
當初始化緩存管理器時,不需要按名稱指定每個緩存,緩存的每個新請求都將基於提供的緩存構建器創建一個緩存,或者在此情況下使用提供的緩存規範(這會導致相應的CacheBuilder)。
你的Spring XML最終是極爲考究:
<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager">
<property name="cacheSpecification" value="maximumSize=300000,expireAfterWrite=10h" />
</bean>
另請注意:不要忘記包括在您的應用程序配置XML這樣的事情要告訴你正在使用的緩存春:
<cache:annotation-driven/>
,你將需要當然的定義:
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/cache classpath:org/springframework/cache/config/spring-cache-4.2.xsd"
如果你不這樣做像這樣簡單的事情,並且你希望有多個CacheBuilder用於不同的用例,那麼你可能會想要創建自己的Factory Class和Method。
謝謝 - 我通過FactoryBean運行它! – kuriouscoder 2012-04-27 22:13:41
@ kuriouscoder你能分享你的片段,我在同一條船上,謝謝! – 2012-08-20 22:28:06
如果你更喜歡使用Java配置,這個問題上有一個完整的例子:http://stackoverflow.com/questions/8181768/can-i-set-a-ttl-for-cacheable/31926759#31926759 – anataliocs 2015-08-10 18:47:04