问题背景
我有一个定时任务@Component ,其中注入了一个Service类,但是启动的时候,启动不了报required a bean of type ‘XXX’ that could not be found的错误。
解决步骤
required a bean of type ‘XXX’ that could not be found。这个错误很清楚的表示了问题,就是Spring容器中没有名为”XXX“的bean。如果是采用注解的方式,将bean自动注入Spring容器中,则应该首先看注解是否有误。
首先考虑是否注入环节的注解@Service和@Autowired是否忘记书写,确认书写后,还是报错,遂百度一番,各种方法都试了,还是不行,始终显示找不到注入的Service类,无奈求助同事,两秒发现自己的愚蠢问题。
@Service的注解搞成dubbo的注解了。。。。
@service引入包的时候没有检查,手快给引入dubbo的包了。为因为自己愚蠢而耽误的一下午懊恼不已,必须学点东西来弥补。
Spring的@service注解
@service注解和@Controller,@Repository 三个注解是spring经典的三层layer。用在springmvc的控制层(@controller)、业务层(@Service)和持久层(@Repository),来方便将对应的bean自动注册到Spring容器中。而@Component 注解是用在”一般组件“上的。
对于@Component 与@service注解和@Controller,@Repository 的关系在查阅资料的时候看到了这篇问答还不错。https://stackoverflow.com/questions/6827752/whats-the-difference-between-component-repository-service-annotations-in?answertab=votes#tab-top
其中Spring的回答,自己简单理解成下面两点:
- 四者在功能上没有差别,都是标注这个类是一个Spring bean。
@Component :
@Service:
可以看出@service注解被@Component注解”注解“了,可以说@service注解和@Controller,@Repository 都是特殊的@Component注解。 - 为何有@service注解和@Controller,@Repository ,而不是全部都是@Component注解。或者四者是否可以混用,有@service注解和@Controller,@Repository的意义?
首先是为了好区分每层的代码,方便程序员编写,代码不会过于混乱。其次是Spring的这句话:
@service注解和@Controller,@Repository 能让你的类更好的通过工具处理,或者和”切面“关联。
我理解成,相比于普遍性的@Component注解,@service注解和@Controller,@Repository可以更好的根据他们所在层的实际需求增加相应的合适的功能。例如,@Repository具有异常的”自动转换“,@Controller会检测其中用@RequestMapping注释注释的方法,而@Service有什么特别之处还不太清楚,但如果以后有可以就在@Service注解里进行增加。
dubbo的@Service注解
-
什么是Dubbo?
Apache Dubbo 是一款阿里巴巴开源的微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。基础能力包括:服务发现、流式通信、负载均衡、流量治理等。 -
dubbo的@service注解使用?
@Service用在服务提供方,@Reference用在服务消费方。