美文网首页Spring
在Spring starter中使用Feign

在Spring starter中使用Feign

作者: 王勇1024 | 来源:发表于2019-02-22 15:06 被阅读5次
    package com.yidian.data.interfaces.config;
    
    import com.yidian.data.interfaces.utils.ClassUtils;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.EnvironmentAware;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
    import org.springframework.core.env.StandardEnvironment;
    import org.springframework.core.type.AnnotationMetadata;
    import org.springframework.core.type.StandardAnnotationMetadata;
    
    /**
     * Feign 配置
     * @author wangyong
     * @date 2019/2/21
     */
    @Slf4j
    @Configuration
    @EnableFeignClients("com.yidian.data.interfaces.client")
    public class FeignAutoConfiguration {
    
        FeignAutoConfiguration(ApplicationContext context) {
            try {
                loadFeignClients(context);
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }
        }
    
        public void loadFeignClients(ApplicationContext context) throws Exception {
            final AutowireCapableBeanFactory beanFactory = context.getAutowireCapableBeanFactory();
            final Class<?> candidateClass = ClassUtils.forName("org.springframework.cloud.openfeign.FeignClientsRegistrar");
            final ImportBeanDefinitionRegistrar registrar =
                    BeanUtils.instantiateClass(candidateClass, ImportBeanDefinitionRegistrar.class);
    
            BeanDefinitionRegistry registry = null;
            if (beanFactory instanceof BeanDefinitionRegistry) {
                registry = (BeanDefinitionRegistry) beanFactory;
            }
            if (registrar instanceof EnvironmentAware) {
                EnvironmentAware envAware = (EnvironmentAware) registrar;
                envAware.setEnvironment(new StandardEnvironment());
            }
            final AnnotationMetadata metadata = new StandardAnnotationMetadata(FeignAutoConfiguration.class);
            registrar.registerBeanDefinitions(metadata, registry);
    
        }
    }
    

    相关文章

      网友评论

        本文标题:在Spring starter中使用Feign

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