The injection point has the following annotations: - @org.springframework.beans.factory.annotation.
springboot使用Fegin,创建服务接口,在controller里面注入Feign接口对象,结果启动报错。
Description:
Field cityClient in com.example.controller.HttpController required a bean of type 'com.example.service.CityClient' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.example.service.CityClient' in your configuration.
但是看了bean的注入是没有问题的,后来发现是Application的@EnableFeignClients和@Component这两个注解冲突了。
注解 @EnableFeignClients 与 @ComponentScan 有冲突,两种注解都会搜索注入指定目录中的 bean 。@EnableFeignClients 引入了 FeignClientsRegistrar 类,实现了 Spring 的bean 资源的加载。
FeignClientsRegistrar中registerFeignClients方法获取了@EnableFeignClients注解中的basepackage 属性值,并进行注入。如果两种注解都使用时,其中@EnableFeignClients会覆盖 @ComponentScan 中指定的目录,从而恢复到默认目录。
解决方法:
1、在注解@EnableFeignClients指定clients,原来我代码里没有指定clients
2、可以将 FeignClient 这个 bean 放在和 Application 启动类同级目录(这个我没试过,应该可以)