SpringCloud-zuul源码分析
核心代码块梳理
com.netflix.zuul.filters.FilterRegistry
//在FilterLoader里面使用putFilter()方法将过滤器缓存在FilterRegistry的filters对象中
public class FilterRegistry {
//饿汉模式
private static final FilterRegistry INSTANCE = new FilterRegistry();
public static final FilterRegistry instance() {
return INSTANCE;
}
//使用ConcurrentHashMap装载ZuulFilter的全局缓存对象
private final ConcurrentHashMap<String, ZuulFilter> filters = new ConcurrentHashMap<String, ZuulFilter>();
private FilterRegistry() {
}
//缓存了ZuulFilter,除非主动调用remove方法,否则永久不会自动清理。
public ZuulFilter remove(String key) {
return this.filters.remove(key);
}
public ZuulFilter get(String key) {
return this.filters.get(key);
}
public void put(String key, ZuulFilter filter) {
this.filters.putIfAbsent(key, filter);
}
public int size() {
return this.filters.size();
}
public Collection<ZuulFilter> getAllFilters() {
return this.filters.values();
}
}
com.netflix.zuul.FilterLoader
单例模式之饿汉式及线程安全问题
分析:
饿汉式是在类加载的时候创建实例,所以线程是安全的.
关键点:
1:私有构造函数
2:静态私有方法—在类加载时已经初始化
3:公开访问点getInstance—不需要同步,因为在类加载时已经初始化完毕,也不需要判断null,直接返回即可.
优点:
类加载时完成初始化,获取对象的速度较快.
*public class FilterLoader {
//静态final实例 ,经典饿汉式单例,类加载时完成初始化完成,
final static FilterLoader INSTANCE = new FilterLoader();
}*