簡體   English   中英

通過Spring將Google番石榴緩存構建器注入bean

[英]Injecting Google guava cache builder into bean via Spring

有人可以提供一個很好的片段來構建和通過Spring xml將Google番石榴的CacheBuilder注入依賴bean嗎?

為了概括,我需要一些Spring中的示例來說明使用構建器模式構造對象。

通過在下一個Guava版本(版本12)中添加CacheBuilderSpec ,您將能夠使用CacheBuilder.from(String spec)靜態工廠方法在xml中創建CacheBuilder bean。

它看起來像這樣:

<bean id="legendaryCacheBuilder"
      class="com.google.common.cache.CacheBuilder"
      factory-method="from">
    <constructor-arg value="maximumSize=42, expireAfterAccess=10m, expireAfterWrite=1h" />
</bean>

您甚至可以使用Spring的PropertyPlaceholderConfigurer將配置字符串外部化為.properties文件。

在那之前,你應該使用Sean Patrick Floyd的解決方案(它還具有類型安全的優點)。

雖然可以使用factory-method屬性在Spring XML中調用任意方法 ,但您會發現Builder-Pattern樣式鏈接調用幾乎不可能。

相反,對於此類復雜方案,請使用FactoryBean基於Java的容器配置 我擔心,XML不會讓你那么遠。

還想補充一點,如果您對不同緩存的不同緩存構建器不感興趣,可以直接在緩存管理器中使用緩存規范。

在初始化緩存管理器時,您不需要按名稱指定每個緩存,每個緩存的新請求將基於提供的CacheBuilder構建一個緩存,或者在這種情況下使用提供的緩存規范(導致相應的CacheBuilder)構建一個緩存。

你是Spring XML最終非常優雅:

<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager">
    <property name="cacheSpecification" value="maximumSize=300000,expireAfterWrite=10h" />
</bean>

另請注意:不要忘記通過在應用程序配置xml中包含類似的內容來告訴spring您正在使用緩存:

<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,那么您可能希望創建自己的工廠類和方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM