복붙노트

[SPRING] Spring을 통해 Bean에 Google guava 캐시 빌더 주입

SPRING

Spring을 통해 Bean에 Google guava 캐시 빌더 주입

어떤 사용자가 Spring bean을 통해 의존성 빈에 Google 구아바의 CacheBuilder를 구성하고 삽입 할 수있는 좋은 스 니펫을 제공 할 수 있습니까?

일반화하기 위해, 빌더 패턴을 사용하여 객체를 생성하는 예제를 Spring에서 필요로한다.

해결법

  1. ==============================

    1.factory-method 속성을 사용하여 Spring XML에서 임의의 메소드를 호출 할 수는 있지만 빌더 - 패턴 스타일 체인 콜에서는 거의 불가능하다는 것을 알게 될 것이다.

    factory-method 속성을 사용하여 Spring XML에서 임의의 메소드를 호출 할 수는 있지만 빌더 - 패턴 스타일 체인 콜에서는 거의 불가능하다는 것을 알게 될 것이다.

    대신, 이러한 복잡한 시나리오에 대해 FactoryBean 또는 Java 기반 컨테이너 구성을 사용하십시오. XML은 그렇게까지 당신을 얻지 못할 것입니다, 나는 두려워합니다.

  2. ==============================

    2.다음 Guava 릴리스 (릴리스 12)에 CacheBuilderSpec을 추가하면 CacheBuilder.from (String spec) 정적 팩토리 메소드를 사용하여 xml로 CacheBuilder 빈을 생성 할 수 있습니다.

    다음 Guava 릴리스 (릴리스 12)에 CacheBuilderSpec을 추가하면 CacheBuilder.from (String spec) 정적 팩토리 메소드를 사용하여 xml로 CacheBuilder 빈을 생성 할 수 있습니다.

    다음과 같이 보입니다.

    <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의 솔루션을 사용해야합니다 (또한 유형 안전성이 장점입니다).

  3. ==============================

    3.또한 다른 캐시에 대해 다른 캐시 빌더에 관심이 없다면 캐시 관리자에서 캐시 스펙을 직접 사용할 수 있다고 덧붙이고 싶습니다.

    또한 다른 캐시에 대해 다른 캐시 빌더에 관심이 없다면 캐시 관리자에서 캐시 스펙을 직접 사용할 수 있다고 덧붙이고 싶습니다.

    캐쉬 관리 프로그램을 초기화 할 때 이름별로 캐시를 지정하지 않아도됩니다. 캐시에 대한 각각의 새 요청은 제공된 CacheBuilder를 기반으로 작성됩니다.이 경우 제공된 Cache Spec을 사용하여 해당 CacheBuilder를 작성합니다.

    Spring XML은 매우 우아합니다.

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

    또한 참고 : 응용 프로그램 config 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를 생성하는 것이 좋습니다.

  4. from https://stackoverflow.com/questions/10355571/injecting-google-guava-cache-builder-into-bean-via-spring by cc-by-sa and MIT license