@Override
    public ExecuteContext before(ExecuteContext context) {
        Object[] arguments = context.getArguments();
        if (arguments[0] instanceof HystrixConcurrencyStrategy) {
            if (!HystrixRequestContext.isCurrentThreadInitialized()) {
                HystrixRequestContext.initializeContext();
            }
            HystrixRequestVariableDefault<RequestTag> hystrixRequest = new HystrixRequestVariableDefault<>();
            RequestTag requestTag = ThreadLocalUtils.getRequestTag();

            // It is forbidden to deposit null, otherwise there will be serious performance problems
            hystrixRequest.set(requestTag == null ? EMPTY_REQUEST_HEADER : requestTag);
        }
        return context;
    }
@Test
    public void testBefore() {
        Map<String, List<String>> header = new HashMap<>();
        header.put("bar", Collections.singletonList("bar1"));
        header.put("foo", Collections.singletonList("foo1"));
        ThreadLocalUtils.addRequestTag(header);
        interceptor.before(context);
        HystrixRequestContext context = HystrixRequestContext.getContextForCurrentThread();
        Assert.assertNotNull(context);
        Map<HystrixRequestVariableDefault<?>, ?> state = ReflectUtils.getFieldValue(context, "state")
                .map(value -> (Map<HystrixRequestVariableDefault<?>, ?>) value).orElse(Collections.emptyMap());
        for (Entry<HystrixRequestVariableDefault<?>, ?> entry : state.entrySet()) {
            Object lazyInitializer = entry.getValue();
            Object obj = ReflectUtils.getFieldValue(lazyInitializer, "value").orElse(null);
            if (obj instanceof RequestTag) {
                entry.getKey().remove();
                Assert.assertEquals(header, ((RequestTag) obj).getTag());
            }
        }
    }