问题描述:
项目引入openFeign ,调用FeignClient提示:
Field demoClient in com.demo2.controller.DemoController required a bean of type 'com.demo.feign.IDemoClient' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
问题的原因是两个报名的路径不一致;FeignClient接口包名和当前服务的包名不一致。
问题解决方案:
方案一:
指定@EnableFeignClients的扫描路径。
//示例一
@EnableFeignClients("com.demo")
//示例二
@EnableFeignClients(basePackages ="com.demo")
方案二:
@EnableFeignClients(clients = {IDemoClient.class})
启动就正常了。
@EnableFeignClients学习
是一个声明式的 Web 服务客户端,它使得编写 Web 服务客户端变得更加简单。
@EnableFeignClients
注解通常用于 Spring Boot 应用程序的启动类上,以启用 Feign 客户端的自动配置。当使用 @EnableFeignClients
注解时,Spring 会自动扫描并配置所有使用 @FeignClient
注解的接口。
@EnableFeignClients源码
@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 {};
}
@EnableFeignClients用属性
-
basePackages: 指定Feign客户端接口所在的包路径。Spring Boot会自动扫描这些包中带有
@FeignClient
注解的接口。@EnableFeignClients(basePackages = "com.demo.client")
-
basePackageClasses: 通过类来指定Feign客户端接口所在的包路径。这些类必须位于你想要扫描的包中。
@EnableFeignClients(basePackageClasses = IDemoClient.class)
-
clients: 一个类数组,指定Feign客户端接口的类。Spring Boot会扫描这些类并为它们创建代理对象。
@EnableFeignClients(clients = { IDemoClient.class, IDemo2Client.class })
-
defaultConfiguration: 指定Feign客户端的默认配置类。这个配置类可以提供Feign客户端的全局配置。
@EnableFeignClients(defaultConfiguration = DemoFeignClientConfig.class)
-
value : 指定要扫描的包路径,用于查找使用 @FeignClient 注解的接口。
@EnableFeignClients("com.demo.client")