// Path: src/main/java/com/ace/cache/parser/ICacheResultParser.java
// public interface ICacheResultParser {
//     /**
//      * 解析结果
//      *
//      * @param value
//      * @param returnType
//      * @param origins
//      * @return
//      */
//     public Object parse(String value, Type returnType, Class<?>... origins);
// }
// 
// Path: src/test/java/com/ace/cache/test/cache/MyKeyGenerator.java
// public class MyKeyGenerator extends IKeyGenerator {
//     @Override
//     public IUserKeyGenerator getUserKeyGenerator() {
//         return null;
//     }
// 
//     @Override
//     public String buildKey(String key, CacheScope scope, Class<?>[] parameterTypes, Object[] arguments) {
//         return "myKey_"+arguments[0];
//     }
// }
// 
// Path: src/test/java/com/ace/cache/test/entity/User.java
// public class User {
//     private String name;
//     private int age;
//     private String account;
// 
//     public User(String name, int age, String account) {
//         this.name = name;
//         this.age = age;
//         this.account = account;
//     }
// 
//     public User() {
//     }
// 
//     public String getAccount() {
//         return account;
//     }
// 
//     public void setAccount(String account) {
//         this.account = account;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
// 
//     public void setAge(int age) {
//         this.age = age;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         User user = (User) o;
// 
//         if (age != user.age) return false;
//         return account != null ? account.equals(user.account) : user.account == null;
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = age;
//         result = 31 * result + (account != null ? account.hashCode() : 0);
//         return result;
//     }
// }
// 
// Path: src/test/java/com/ace/cache/test/service/UserService.java
// public interface UserService {
// 
//     User get(String account);
// 
//     List<User> getLlist();
// 
//     Set<User> getSet();
// 
//     Map<String, User> getMap();
// 
//     void save(User user);
// 
//     User get(int age);
// 
//     void biz(String account);
// 
//     int getAge(String account);
// 
//     String getName(String account);
// }


import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.ace.cache.annotation.CacheGlobalLock;
import com.ace.cache.parser.ICacheResultParser;
import com.ace.cache.test.cache.MyKeyGenerator;
import com.ace.cache.test.entity.User;
import com.ace.cache.test.service.UserService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.lang.reflect.Type;
import java.util.*;
    @Cache(key = "user:set", parser = SetCacheResultParser.class)
    public Set<User> getSet() {
        log.debug("从方法内读取....");
        Set<User> users = new HashSet<User>();
        for (int i = 0; i < 20; i++) {
            User user = new User("Ace", i, "ace");
            users.add(user);
        }
        return users;
    }

    @Override
    @Cache(key = "user:map",parser = UserMapCacheResultParser.class)
    public Map<String, User> getMap() {
        log.debug("从方法内读取....");
        Map<String,User> users = new HashMap<String, User>();
        for (int i = 0; i < 20; i++) {
            User user = new User("Ace", i, "ace");
            users.put(user.getAccount() + i, user);
        }
        return users;
    }

    @Override
    @CacheClear(pre = "user")
    public void save(User user) {

    }

    @Override
// Path: src/main/java/com/ace/cache/parser/ICacheResultParser.java
// public interface ICacheResultParser {
//     /**
//      * 解析结果
//      *
//      * @param value
//      * @param returnType
//      * @param origins
//      * @return
//      */
//     public Object parse(String value, Type returnType, Class<?>... origins);
// }
// 
// Path: src/test/java/com/ace/cache/test/cache/MyKeyGenerator.java
// public class MyKeyGenerator extends IKeyGenerator {
//     @Override
//     public IUserKeyGenerator getUserKeyGenerator() {
//         return null;
//     }
// 
//     @Override
//     public String buildKey(String key, CacheScope scope, Class<?>[] parameterTypes, Object[] arguments) {
//         return "myKey_"+arguments[0];
//     }
// }
// 
// Path: src/test/java/com/ace/cache/test/entity/User.java
// public class User {
//     private String name;
//     private int age;
//     private String account;
// 
//     public User(String name, int age, String account) {
//         this.name = name;
//         this.age = age;
//         this.account = account;
//     }
// 
//     public User() {
//     }
// 
//     public String getAccount() {
//         return account;
//     }
// 
//     public void setAccount(String account) {
//         this.account = account;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
// 
//     public void setAge(int age) {
//         this.age = age;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         User user = (User) o;
// 
//         if (age != user.age) return false;
//         return account != null ? account.equals(user.account) : user.account == null;
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = age;
//         result = 31 * result + (account != null ? account.hashCode() : 0);
//         return result;
//     }
// }
// 
// Path: src/test/java/com/ace/cache/test/service/UserService.java
// public interface UserService {
// 
//     User get(String account);
// 
//     List<User> getLlist();
// 
//     Set<User> getSet();
// 
//     Map<String, User> getMap();
// 
//     void save(User user);
// 
//     User get(int age);
// 
//     void biz(String account);
// 
//     int getAge(String account);
// 
//     String getName(String account);
// }


// Path: src/test/java/com/ace/cache/test/service/impl/UserServiceImpl.java
import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.ace.cache.annotation.CacheGlobalLock;
import com.ace.cache.parser.ICacheResultParser;
import com.ace.cache.test.cache.MyKeyGenerator;
import com.ace.cache.test.entity.User;
import com.ace.cache.test.service.UserService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.lang.reflect.Type;
import java.util.*;

    @Cache(key = "user:set", parser = SetCacheResultParser.class)
    public Set<User> getSet() {
        log.debug("从方法内读取....");
        Set<User> users = new HashSet<User>();
        for (int i = 0; i < 20; i++) {
            User user = new User("Ace", i, "ace");
            users.add(user);
        }
        return users;
    }

    @Override
    @Cache(key = "user:map",parser = UserMapCacheResultParser.class)
    public Map<String, User> getMap() {
        log.debug("从方法内读取....");
        Map<String,User> users = new HashMap<String, User>();
        for (int i = 0; i < 20; i++) {
            User user = new User("Ace", i, "ace");
            users.put(user.getAccount() + i, user);
        }
        return users;
    }

    @Override
    @CacheClear(pre = "user")
    public void save(User user) {

    }

    @Override
    @Cache(key="user",generator = MyKeyGenerator.class)