在Spring starter中使用Feign

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 boot项目中,需要防止CSRF攻击,按理说应该集成spring security才对。但是不...
    大神带我来搬砖阅读 8,094评论 5 45
  • 偶然看到朋友圈一好友发圈说:“小妞儿失恋了,陪她小酌一杯。”随后调笑道:“好久未曾听过谁讲失恋怎么样怎么样,感觉好...
    花嫱阅读 260评论 0 0
  • 第二节节主要是关于资源搜索资源搜索心法:遇到资源问题,先百度再淘宝,实在不行问知乎
    萍水如水阅读 241评论 0 0
  • 或许有时候计划真的应该考虑实际情况,因为我毕竟不是一个人住。发现好多计划都相应的会受到影响,就像今天,好好的计划还...
    玛丽苏日记阅读 366评论 0 1
  • 几个大观念: 大脑在不断变化,大脑可以打破旧的神经连接,建立新的神经连接,这是在不断变化,不断修正的,这被称为神经...
    Fidelia_b910阅读 124评论 0 0