Feign API模块导入的两种方式

说明:在微服务框架中,会把其他微服务用到的FeignClient统一放到一个模块里面,称为FeignAPI,其他微服务需要使用FeignClient,引入FeignClient的Maven坐标就可以使用。

但是只引入FeignAPI的坐标还不行,FeignAPI中的Bean对象是孤立的,还需要把FeignAPI中的Bean对象加入到IOC容器中才可以正常使用。有以下两种方式:

方式一:自动装配

可以使用SpingBoot自动装配的原理,在该模块下的resources文件夹下创建一个META-INF文件夹,该文件夹下创建一个spring.factories文件。

Feign API模块导入的两种方式_第1张图片

该文件内写下面这行配置:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=核心配置类

表示项目启动时,自动装配该Bean,然而该Bean又可以作为配置类,可以添加许多需要自动装配的Bean对象,比如客户端类(FeignClient)所在包下的所有客户端类,拦截器类,如下:

/**
 * feign配置类
 */
@EnableFeignClients(basePackages = "com.hmall.feignclient")
@Configuration
public class FeignConfig {

    /**
     * RequestInterceptor拦截器
     * @return
     */
    @Bean
    public AuthorizationRequestInterceptor feighClientIntercepter(){
        return new AuthorizationRequestInterceptor();
    }

    /**
     * HandlerInterceptor拦截器
     * @return
     */
    @Bean
    public MVCInterceptorConfig mvcInterceptorConfig(){
        return new MVCInterceptorConfig();
    }
}

方式二:注解

还可以在需要使用到FeignAPI的微服务启动类上,增加@EnableFeignClients注解,注解内填Feign中的Client类和注册类;

@EnableFeignClients(clients = {注册类1.class,注册类2.class},defaultConfiguration = 配置类.class)

Feign API模块导入的两种方式_第2张图片

总结

以上两种方式都可以实现FeignAPI模块的导入,但是强烈推荐使用自动装配的方式*,有以下几点理由:

  • 自动装配使用了SpringBoot底层原理,更加高级;

  • 自动装配把导入模块需要做的事情,写在了模块本身上,使其他微服务引入了依赖就可以用,减少了代码入侵,非常方便;

  • 另外,使用自动装配的方式,可以把MVC的拦截器直接写在FeignAPI里,如果使用了注解的方式就不行;

  • 最后,使用注解方式很容易出现空指针异常或者意向不到的错误;

总之一句话,不要用注解,用自动装配;

你可能感兴趣的:(Feign,微服务,分布式)