Spring

在Spring starter中使用Feign

2019-02-22  本文已影响5人  王勇1024
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);

    }
}
上一篇 下一篇

猜你喜欢

热点阅读