@EnableFeignClients注解用来启动FeignClient,以支持Feign。该注解可以通过配置,扫描指定位置的@FeignClient注解声明的Feign客户端接口。源码如下:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import(FeignClientsRegistrar.class) public @interface EnableFeignClients { String[] value() default {}; String[] basePackages() default {}; Class<?>[] basePackageClasses() default {}; Class<?>[] defaultConfiguration() default {}; Class<?>[] clients() default {}; }
下面将通过实例对该注解的其他属性一一进行讲解。实例项目结构如下:
其中:
FeginClient客户端:SchedualServiceHi和SchedualServiceHi2
Controller控制器:HiController,该控制器中引入了上面两个FeignClient
ServiceFeignApplication通过@FeignClient引入/扫描FeignClient
value和basePackage具有相同的功能,其中value是basePackage的别名。分别如下:
value:为basePackages属性的别名,允许使用更简洁的书写方式。例如:@EnableFeignClients({“com.huangx”})
basePackage:设置自动扫描带有@FeignClient注解的基础包路径。例如:com.huangx;value和basePackage只能同时使用一个。
实例:下面将自动扫描“com.forezp.service”和“com.forezp.service2”包下面所有被@FeignClient注解修饰的类。代码如下:
@SpringBootApplication @EnableEurekaClient @EnableFeignClients({"com.forezp.service", "com.forezp.service2"}) public class ServiceFeignApplication { public static void main(String[] args) { SpringApplication.run(ServiceFeignApplication.class, args); } }
我们也可以使用basePackage进行设置,代码如下:
@SpringBootApplication @EnableEurekaClient @EnableFeignClients(basePackages = {"com.forezp.service", "com.forezp.service2"}) public class ServiceFeignApplication { public static void main(String[] args) { SpringApplication.run(ServiceFeignApplication.class, args); } }
该属性是basePackages属性的安全替代属性。该属性将扫描指定的每个类所在的包下面的所有被@FeignClient修饰的类;这需要考虑在每个包中创建一个特殊的标记类或接口,该类或接口除了被该属性引用外,没有其他用途。
实例:下面将自动扫描“com.forezp.service”和“com.forezp.service2”包下面所有被@FeignClient注解修饰的类。代码如下:
@SpringBootApplication @EnableEurekaClient @EnableFeignClients(basePackageClasses = {ServicePackage.class, Service2Package.class}) public class ServiceFeignApplication { public static void main(String[] args) { SpringApplication.run(ServiceFeignApplication.class, args); } }
该属性用来自定义所有Feign客户端的配置,使用@Configuration进行配置。当然也可以为某一个Feign客户端进行配置。具体配置方法见@FeignClient的configuration属性。
设置由@FeignClient注解修饰的类列表。如果clients不是空数组,则不通过类路径自动扫描功能来加载FeignClient。实例:
@SpringBootApplication @EnableEurekaClient @EnableFeignClients(clients = {SchedualServiceHi.class, SchedualServiceHi2.class}) public class ServiceFeignApplication { public static void main(String[] args) { SpringApplication.run(ServiceFeignApplication.class, args); } }
上面代码中引入FeignClient客户端SchedualServiceHi,且也只引入该FeignClient客户端。
项目源码: