美文网首页
说一说反射机制在zuul的类ZuulFilterInitiali

说一说反射机制在zuul的类ZuulFilterInitiali

作者: 天草二十六_简村人 | 来源:发表于2022-05-21 13:50 被阅读0次
  • spring的工具类ReflectionUtils
  • 先查找到目标域
  • 然后修改为可访问状态
  • 最后得到对象,执行对象的方法。
 private final ConcurrentHashMap<String, List<ZuulFilter>> hashFiltersByType = new ConcurrentHashMap();
    import org.springframework.util.ReflectionUtils;

    private void clearLoaderCache() {
        Field field = ReflectionUtils.findField(FilterLoader.class, "hashFiltersByType");
        ReflectionUtils.makeAccessible(field);
        Map cache = (Map)ReflectionUtils.getField(field, this.filterLoader);
        cache.clear();
    }

最后贴出类的完整代码:

  • 定义变量及构造函数
 private final Map<String, ZuulFilter> filters;
    private final CounterFactory counterFactory;
    private final TracerFactory tracerFactory;
    private final FilterLoader filterLoader;
    private final FilterRegistry filterRegistry;

    public ZuulFilterInitializer(Map<String, ZuulFilter> filters, CounterFactory counterFactory, TracerFactory tracerFactory, FilterLoader filterLoader, FilterRegistry filterRegistry) {
        this.filters = filters;
        this.counterFactory = counterFactory;
        this.tracerFactory = tracerFactory;
        this.filterLoader = filterLoader;
        this.filterRegistry = filterRegistry;
    }
  • @PostConstruct 用于在初始化时,要做的动作

  • @PreDestroy 用于容器销毁前,要做的清理工作,这里就涉及到上文的clearLoaderCache()

package org.springframework.cloud.netflix.zuul;

import com.netflix.zuul.FilterLoader;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.filters.FilterRegistry;
import com.netflix.zuul.monitoring.CounterFactory;
import com.netflix.zuul.monitoring.TracerFactory;
import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.ReflectionUtils;

public class ZuulFilterInitializer {
    private static final Log log = LogFactory.getLog(ZuulFilterInitializer.class);
    private final Map<String, ZuulFilter> filters;
    private final CounterFactory counterFactory;
    private final TracerFactory tracerFactory;
    private final FilterLoader filterLoader;
    private final FilterRegistry filterRegistry;

    public ZuulFilterInitializer(Map<String, ZuulFilter> filters, CounterFactory counterFactory, TracerFactory tracerFactory, FilterLoader filterLoader, FilterRegistry filterRegistry) {
        this.filters = filters;
        this.counterFactory = counterFactory;
        this.tracerFactory = tracerFactory;
        this.filterLoader = filterLoader;
        this.filterRegistry = filterRegistry;
    }

    @PostConstruct
    public void contextInitialized() {
        log.info("Starting filter initializer");
        TracerFactory.initialize(this.tracerFactory);
        CounterFactory.initialize(this.counterFactory);
        Iterator var1 = this.filters.entrySet().iterator();

        while(var1.hasNext()) {
            Entry<String, ZuulFilter> entry = (Entry)var1.next();
            this.filterRegistry.put((String)entry.getKey(), (ZuulFilter)entry.getValue());
        }

    }

    @PreDestroy
    public void contextDestroyed() {
        log.info("Stopping filter initializer");
        Iterator var1 = this.filters.entrySet().iterator();

        while(var1.hasNext()) {
            Entry<String, ZuulFilter> entry = (Entry)var1.next();
            this.filterRegistry.remove((String)entry.getKey());
        }

        this.clearLoaderCache();
        TracerFactory.initialize((TracerFactory)null);
        CounterFactory.initialize((CounterFactory)null);
    }

    private void clearLoaderCache() {
        Field field = ReflectionUtils.findField(FilterLoader.class, "hashFiltersByType");
        ReflectionUtils.makeAccessible(field);
        Map cache = (Map)ReflectionUtils.getField(field, this.filterLoader);
        cache.clear();
    }
}

相关文章

  • 说一说反射机制在zuul的类ZuulFilterInitiali

    spring的工具类ReflectionUtils 先查找到目标域 然后修改为可访问状态 最后得到对象,执行对象的...

  • 反射机制基础

    一、反射 1、反射机制 反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方...

  • PHP Reflection 反射

    反射 ReflectionClass 类 PHP反射机制 反射在 PHP 中的应用

  • 注解 - 反射,运行时动态获取注解信息

    反射 什么是反射? 反射:是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的方法,属性,构造方法等...

  • Android 使用注解和反射自制简单版的butternife

    一.Java反射机制。 1.反射机制的定义。 Java反射机制是指在运行状态中,对于任意一个类,都能知道这个类的所...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

  • Java反射基础详解

    Java反射机制 反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任...

  • Java 反射机制 (转)

    目录反射机制是什么反射机制能做什么反射机制的相关API通过一个对象获得完整的包名和类名实例化Class类对象获取一...

  • Java反射机制

    Java反射机制 概念 Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意...

  • 反射机制

    反射机制 反射机制是什么 1.反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 2.对于...

网友评论

      本文标题:说一说反射机制在zuul的类ZuulFilterInitiali

      本文链接:https://www.haomeiwen.com/subject/mnctprtx.html