CacheOperation parsePutAnnotation(
      AnnotatedElement ae, DefaultCacheConfig defaultConfig, CachePut cachePut) {
    CachePutOperation op = new CachePutOperation();

    op.setCacheNames(cachePut.cacheNames());
    op.setCondition(cachePut.condition());
    op.setUnless(cachePut.unless());
    op.setKey(cachePut.key());
    op.setKeyGenerator(cachePut.keyGenerator());
    op.setCacheManager(cachePut.cacheManager());
    op.setCacheResolver(cachePut.cacheResolver());
    op.setName(ae.toString());

    defaultConfig.applyDefault(op);
    validateCacheOperation(ae, op);

    return op;
  }
  CacheEvictOperation parseEvictAnnotation(
      AnnotatedElement ae, DefaultCacheConfig defaultConfig, CacheEvict cacheEvict) {
    CacheEvictOperation op = new CacheEvictOperation();

    op.setCacheNames(cacheEvict.cacheNames());
    op.setCondition(cacheEvict.condition());
    op.setKey(cacheEvict.key());
    op.setKeyGenerator(cacheEvict.keyGenerator());
    op.setCacheManager(cacheEvict.cacheManager());
    op.setCacheResolver(cacheEvict.cacheResolver());
    op.setCacheWide(cacheEvict.allEntries());
    op.setBeforeInvocation(cacheEvict.beforeInvocation());
    op.setName(ae.toString());

    defaultConfig.applyDefault(op);
    validateCacheOperation(ae, op);

    return op;
  }