Вопрос по spring, java – Внедрение компоновщика гугл-кэша в bean-компонент через Spring

15

Может ли кто-нибудь предоставить хороший фрагмент для создания и внедрения Google Guava?CacheBuilder в зависимый бин черезSpring XML?

Чтобы обобщить, мне нужно несколько примеров вSpring это иллюстрирует построение объектов с использованием шаблона строителя.

Ваш Ответ

3   ответа
18

CacheBuilderSpec в следующем выпуске Guava (выпуск 12) вы сможете создатьCacheBuilder бин в XML, используяCacheBuilder.from (спецификация строки) статический фабричный метод.

Это будет выглядеть так:

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

Вы даже можете перенести строку конфигурации в файл .properties, используя Spring.PropertyPlaceholderConfigurer.

До тех пор вы должны использовать решение Шона Патрика Флойда (которое также имеет преимущество в том, что оно безопасно для типов).

10

вызывать произвольные методы в Spring XML, используяfactory-method attributeвы обнаружите, что это близко к невозможному для цепочек вызовов в стиле Builder-Pattern.

Вместо этого используйтеFactoryBean или жеКонфигурация контейнера на основе Java для таких сложных сценариев. Боюсь, что XML не поможет вам так далеко.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded@ConfigurationError: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/8181768/…
Error: User Rate Limit Exceeded kuriouscoder
3

что вы можете использовать Cache Spec непосредственно в Cache Manager, если вы не заинтересованы в разных Cache Builder для разных Cache.

От вас не требуется указывать каждый кэш по имени при инициализации диспетчера кэша, каждый новый запрос к кэшу будет создавать запрос на основе предоставленного CacheBuilder или, в данном случае, с помощью предоставленной спецификации кэша (что приводит к соответствующему CacheBuilder).

Вы Spring XML заканчиваете тем, что были чрезвычайно изящны:

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

Также обратите внимание: не забудьте сообщить Spring, что вы используете кеширование, добавив что-то подобное в конфигурацию вашего приложения 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.

Похожие вопросы