package com.kym.service.enplus.impl;

import com.kym.service.enplus.EnPlusService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * @author skyline
 * @description 这里处理很粗糙，后面再优化吧
 * @date 2023-08-02 15:38
 */
@Service
@CacheConfig
public class EnPlusServiceHelper {
    /*
     * 原因：
     * Spring 缓存注解是基于Spring AOP切面，必须走代理才能生效，同类调用或者子类调用父类带有缓存注解的方法时属于内部调用，没有走代理，所以注解不生效。
     * 解决方法： 将方法抽离到一个独立类中
     */

    private EnPlusService enPlusService;

    @Autowired
    public void setEnPlusService(EnPlusService enPlusService) {
        this.enPlusService = enPlusService;
    }

    @Cacheable(cacheNames = "EN_PLUS", key = "#root.methodName")
    //有个坑，@Cacheable 注解在对象内部调用不会生效，参考：https://blog.csdn.net/zh452647457/article/details/86487423
    public String queryToken() {
        return enPlusService.queryToken();
    }

}
