说明:在微服务框架中,会把其他微服务用到的FeignClient统一放到一个模块里面,称为FeignAPI,其他微服务需要使用FeignClient,引入FeignClient的Maven坐标就可以使用。
但是只引入FeignAPI的坐标还不行,FeignAPI中的Bean对象是孤立的,还需要把FeignAPI中的Bean对象加入到IOC容器中才可以正常使用。有以下两种方式:
方式一:自动装配
可以使用SpingBoot自动装配的原理,在该模块下的resources
文件夹下创建一个META-INF
文件夹,该文件夹下创建一个spring.factories
文件。
该文件内写下面这行配置:
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)
总结
以上两种方式都可以实现FeignAPI模块的导入,但是强烈推荐使用自动装配的方式*,有以下几点理由:
-
自动装配使用了SpringBoot底层原理,更加高级;
-
自动装配把导入模块需要做的事情,写在了模块本身上,使其他微服务引入了依赖就可以用,减少了代码入侵,非常方便;
-
另外,使用自动装配的方式,可以把MVC的拦截器直接写在FeignAPI里,如果使用了注解的方式就不行;
-
最后,使用注解方式很容易出现空指针异常或者意向不到的错误;
总之一句话,不要用注解,用自动装配;