站在架构师的角度,任何注入的对象都要实例化。
Consider defining a bean of type 'com.xxx.xxx.xxxx.xxxx.service.data.IDataAuthService' in your configuration.
大家应该都遇到过如上错误吧:需实例化对象的错误
刚学习Spring时,以为在对象上加注入标签@Autowired即可,其实这些注入对象也是要实例化的,真正的实例化是在其对应实现类上加标签@Service,
如果其对应实现类上无@Service即报如上错误。
当发现该实现类上已经加了标签@Service,则要查看启动类@ComponentScan(basePackages = {“xxx”,“yyy” })或者@EnableFeignClients(basePackages = “com.xxxx.service.thirdParty.xxxx”)中是否设置所在包的扫描路径或者设置的扫描路径错误;
再附加一种情况,微服务A模块要调用微服务B模块的对象。
为了独立性,每个微服务我们都分成api模块(定义对象或者接口),service模块(对象实例化),模块之间只在pom.xml中引用api模块,当微服务A模块要调用微服务B模块的对象时,无法获取微服务B中service模块对对象的实例化,就会报如上错误。
解决方案:在微服务A的service模块也实例微服务B的对象。微服务A的service模块增加对应对象的初始化类XXXXXConfiguration在代码运行期初始化对象。
其中ConsumerDataAuthService就是普通的声明式调用@FeignClient
其对应微服务B模块要写出对应的生产者模块
最近刚开始接触架构师的工作,初有感悟:
万物皆要实例化;
架构师和开发人员的思考层面果然不一样。