一种缓存注入的写法

1、我们需要一个缓存接口

public interface CacheService {

    Object get(String key);

    void set(String key, Object value);

    void delete(String key);

    void setCacheService(CacheService cacheService);

}


2、实现这个接口

public class CacheServuceImpl implements CacheService {

    /**
     * 使用匿名类做为缓存接口的实现
     * 这种写法将缓存的实现封装了起来
     */
    private CacheService cacheService = new CacheService() {

        // 默认使用HashMap做为缓存
        private Map<Object, Object> cacheMap = new HashMap<>();

        @Override
        public Object get(String key) {
            return cacheMap.get(key);
        }

        @Override
        public void set(String key, Object value) {
            cacheMap.put(key, value);
        }

        @Override
        public void delete(String key) {
            cacheMap.remove(key);
        }

        @Override
        public void setCacheService(CacheService cacheService) {
            throw new UnsupportedOperationException();
        }

    };

    @Override
    public void setCacheService(CacheService cacheService) {
        this.cacheService = cacheService;
    }

    @Override
    public Object get(String key) {
        Object value = cacheService.get(key);
        System.out.println("获取缓存" + value);
        return value;
    }

    @Override
    public void set(String key, Object value) {
        System.out.println("设置缓存" + value);
        cacheService.set(key, value);
    }

    @Override
    public void delete(String key) {
        System.out.println("删除缓存" + key);
        cacheService.delete(key);
    }
}


3、打印一下

public class Client {

    public static void main(String[] args) {
        CacheService service = new CacheServuceImpl();
        service.set("a", "窗前明月光");
        service.get("a");
        service.delete("a");
        service.get("a");
        
        // 通过set方法可以将我们自动以的缓存实现注入进去
        service.setCacheService(new CacheService() {
            @Override
            public Object get(String key) {
                return null;
            }

            @Override
            public void set(String key, Object value) { }

            @Override
            public void delete(String key) { }

            @Override
            public void setCacheService(CacheService cacheService) { }
        });
    }
}


我们使用匿名类做为默认实现,使用set方法注入自定义实现,好处是脱离了容器,更加灵活。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值