美文网首页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