Error creating bean with name 'deptController' defined in file [E:\IdeaWordSpace\SafetyStandards\blade-service\blade-system\target\classes\org\springblade\system\controller\DeptController.class]: Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springblade.anbiao.guanlijigouherenyuan.feign.IOrganizationsClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No fallback instance of type class org.springblade.anbiao.guanlijigouherenyuan.feign.IOrganizationsClientBack found for feign client blade-anbiao
我来解释一下为什么作者大大说的添加@Component都无效。其实不是无效,而是作者理想化的包目录都是org.springblade,如果我们自定义了自己的业务模块,命名不叫这个,那么配了@Component注解的fallback实例也是扫描不到的。因为SpringBoot默认扫描Application同级目录下的所有包。但是业务模块的包名不一致。
而且要注意的是:就算在@EnableBladeFeign里面加业务模块的包名,也还是报错:无法找到fallback实例,那是因为这个仅仅是找包名下的feign接口,而callback实例是属于@Component,没有被@FeignClient修饰,所以依旧找不到。
那么正确的解决方法就是:在启动类加上
@ComponentScan(basePackages = {"org.springblade","{业务模块包名}"})
我在启动类上面加了注解就好了
@ComponentScan("org.springblade")
使用idea的Build > Rebuild Project, 而不是平时用的Build Project(Ctrl + F9), 可以解决问题. 原因是, Build只会编译被修改了的文件, 但这次, 涉及注解里的内容, 需要强行把所有的classes重新生成. 只有Rebuild Project才有这个效果.
有没有把这个fallback类定义成一个bean,否则会报错
fallback类使用@Component进行修饰了的
扫一扫访问 Blade技术社区 移动端