1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Slf4j
@Service
public class MyCacheService {
 
    /**
     * self-autowiring
     */
    @Resource
    private MyCacheService self;
 
    @Autowired
    private CommonDAO commonDAO;
 
    @Cacheable(value = "my:cache1", unless = "#result == null")
    public String getMyCache() {
        return commonDAO.queryForObject("Cache.SELECT_MY_CACHE"nullString.class);
    }
  
    public void getCache() {
        this.getMyCache(); // 캐싱 안됨
        self.getCache(); // 정상 캐싱
    }
}
cs



문제점
Spring Cache 사용 시 동일 클래스에서 @Cacheable 선언된 메서드를
자기 호출(Self-invocation)할 경우 캐싱이 안되는 현상이 발생함.

  this.getMyCache(); // 캐싱 안됨


해결방안

- 내부 호출이 일어나지 않도록 설계
- Spring 4.3부터 지원하는 @Resource self-autowiring 으로 해결

 /**
  * self-autowiring
  */
  @Resource
  private MyCacheService self;

self.getCache(); // 정상 캐싱