[SPRING] AspectJ aspect 위에 Spring @Cacheable 작업을 만드는 방법은?
SPRINGAspectJ aspect 위에 Spring @Cacheable 작업을 만드는 방법은?
나는 Spring 애플리케이션 내에서 잘 동작하는 AspectJ aspect를 만들었다. 이제 Spring Cacheable 주석을 사용하여 캐싱을 추가하려고합니다.
@Cacheable이 선택되었는지 확인하려면 존재하지 않는 캐시 관리자의 이름을 사용하고 있습니다. 정상적인 런타임 동작은 예외가 발생한다는 것입니다. 그러나이 경우에는 @Cacheable 주석이 인터셉트 객체에 적용되지 않는다는 것을 나타내는 예외가 발생하지 않습니다.
/* { package, some more imports... } */
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.cache.annotation.Cacheable;
@Aspect
public class GetPropertyInterceptor
{
@Around( "call(* *.getProperty(..))" )
@Cacheable( cacheManager = "nonExistingCacheManager", value = "thisShouldBlowUp", key = "#nosuchkey" )
public Object intercepting( ProceedingJoinPoint pjp ) throws Throwable
{
Object o;
/* { modify o } */
return o;
}
}
내 Aspect가 이미 작동 중임을 감안할 때, @Cacheable 작업을 수행하려면 어떻게해야합니까?
해결법
-
==============================
1.Spring의 일반적인 의존성 주입 메커니즘을 사용하고 org.springframework.cache.CacheManager를 aspect에 삽입함으로써 비슷한 결과를 얻을 수있다 :
Spring의 일반적인 의존성 주입 메커니즘을 사용하고 org.springframework.cache.CacheManager를 aspect에 삽입함으로써 비슷한 결과를 얻을 수있다 :
@Autowired CacheManager cacheManager;
다음 around advice에서 캐시 관리자를 사용할 수있다.
@Around( "call(* *.getProperty(..))" ) public Object intercepting( ProceedingJoinPoint pjp ) throws Throwable { Cache cache = cacheManager.getCache("aopCache"); String key = "whatEverKeyYouGenerateFromPjp"; Cache.ValueWrapper valueWrapper = cache.get(key); if (valueWrapper == null) { Object o; /* { modify o } */ cache.put(key, o); return o; } else { return valueWrapper.get(); } }
from https://stackoverflow.com/questions/39047520/how-to-make-spring-cacheable-work-on-top-of-aspectj-aspect by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 j_spring_security 로그 아웃 문제 (0) | 2019.05.19 |
---|---|
[SPRING] Axiom과 Spring WS : JAXB가 MTOM 첨부 파일을 인라인합니다. (0) | 2019.05.19 |
[SPRING] 연결 풀에서 사용 가능한 연결 수 얻기 (0) | 2019.05.19 |
[SPRING] Http 통합 흐름에서 Spring Reactor Flux를 만드는 방법은 무엇입니까? (0) | 2019.05.19 |
[SPRING] 'sessionFactory'라는 이름으로 빈을 생성하는 중 오류가 발생했습니다. 기본 tuplizer를 인스턴스화 할 수 없습니다 [org.hibernate.tuple.entity.PojoEntityTuplizer] (0) | 2019.05.19 |