2020-04-03

利用Resource接口获取缓存数据

package com.example.emaildemo.cache;

import java.util.stream.Stream;

/**
 * 资源接口
 * 资源类
 * @param <T>
 */
public interface Resource<T> {
    /**
     * 资源加载并缓存
     */
    void init();

    /**
     * 获取
     * @param key
     * @return
     */
    T get(String key);

    /**
     * 是否存在
     * @param key
     * @return
     */
    boolean contains(String key);

    /**
     * 返回资源
     * @return
     */
    Stream<T> stream();

    /**
     * 刷新资源
     */
    void refresh();
}

实现类

package com.example.emaildemo.cache;

import com.example.emaildemo.cache.resource.RuleResource;
import com.example.emaildemo.utils.SpringContextHolder;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Stream;

@Component
public class RuleCacheResource implements Resource<RuleResource> {

    private static Map<String,RuleResource> cacheMap = new ConcurrentHashMap<>();
    @Override
    public void init() {
        Map<String,RuleResource> ruleResourceMap = SpringContextHolder.getApplicationContext().getBeansOfType(RuleResource.class);
        cacheMap.putAll(ruleResourceMap);
    }

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

    @Override
    public boolean contains(String key) {
        return cacheMap.containsKey(key);
    }

    @Override
    public Stream<RuleResource> stream() {
        return cacheMap.values().stream();
    }

    @Override
    public void refresh() {
        cacheMap.clear();
    }
}

package com.example.emaildemo.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

import java.util.Objects;

public class SpringContextHolder implements ApplicationContextAware {

    private static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    public static ApplicationContext getApplicationContext(){
        Objects.requireNonNull(context);
        return context;
    }

    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 开源(Open Source)的概念最早被应用于软件,开放源代码促进会(Open Source Initiativ...
    TsungLee阅读 10,514评论 0 1
  • 1.如何解决跨域问题?理解跨域的概念:协议、域名、端口都相同才同域,否则都是跨域出于安全考虑,服务器不允许ajax...
    有只Bug阅读 1,209评论 0 0
  • Adaptive Context Network for Scene Parsing 作者团队:中科院自动化所 关...
    奋斗中的小强阅读 1,404评论 0 0
  • typedefNS_ENUM(NSInteger, SPFileType) { SPFileTypePhoto...
    Super_Chester阅读 1,384评论 0 0
  • 表单 required:如果表单为空,则不提交示例: disabled:不能输入内容; arguments 对象 ...
    执着_7fb1阅读 1,267评论 0 0