Dubbo服务xml引用/注入红色警告?快来试试注解方式吧

在Dubbo-2.6.x时代,我们对Dubbo服务的引入基本全靠xml(xml配置时需要@ImportResource Dubbo的配置文件),该方式引入依赖的Dubbo服务,在使用上不存在问题,但在真正使用的类中注入该服务/实例时,IDEA工具会出现红色的错误提示:Could not autowire.No beans of ‘xxxService’ type found.虽然程序运行没问题,服务也可正常注入,但红色错误提示让很多人受不了,如下图所示:

为什么通过<dubbo:reference />标签已经引入了服务,但使用时还是报找不到的错误提示呢?因为不管是通过@Autowired还是构造器的方式注入,Spring需要在编译期知道这个Bean的声明,找不到自然就给出错误提示。也正是由于<dubbo:reference />标签未能把引入的实例在编译期让Spring识别出来,所以出现错误提示无可厚非,那既然知道了这个问题的存在,该如何消除这个问题呢?

当然,解决这个问题,就需要通过Dubbo提供的相关注解了,既然是引用,2.6.x版本中的注解是@Reference,那我们通过注解在服务中引用试试看(以下配置适用于2.6.5+和2.7.x):

果然使用该注解后,红色的错误消除了,那运行程序测试看效果:

什么?空指针异常?服务没有注入进来?后来才发现是自己的疏忽,没有开启Dubbo,在启动类或其他配置类中添加@EnableDubbo注解,再次启动后,服务可以正常注入。

等等,还没完,问题是解决了,但一个工程的多个服务都需要注入UserInfoService的Dubbo服务,那在每个使用的地否都要添加重复的配置@Reference(包括其他参数),好了,既然提出来了这个疑虑,那肯定还有代码优化的空间,上代码:

添加这个配置后,在使用的地方再注入Dubbo服务,就可以像原生Spring的Bean一样丝滑。