开发者社区> 无信不立> 正文

Spring异常累计(1)Spring注解与扫描,NoUniqueBeanDefinitionException

简介: spring中可以使用注解机制,代替传统的在xml中配置一个bean。 如 [java] view plain copy @Component   public class LoadMessageJob{    // code   }   和是等效的。
+关注继续查看

spring中可以使用注解机制,代替传统的在xml中配置一个bean。

[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. <pre name="code" class="java">@Component  
  2. public class LoadMessageJob{  
  3.  // code  
  4. }  

和<bean id="loadMessageJob" class="com.yicong.kisp.LoadMessageJob" />是等效的。

@Component默认类名的第一个字母小写成为bean的id,最后两者都需要扫描包以生效,<context:component- scan base-package="com.yicong.kisp.invoke">。这样才能在实现了 ApplicationContextAware的类中使用getBean("id")得到一个容器管理的实例。

实现ApplicationContextAware接口要实现 setApplicationContext(ApplicationContext arg0)方法。该方法传入一个ApplicationContext 对象,从这个object可以得到spring中所有被扫描的bean。所以,两步必不可少

1、@Component注解一个类或用定义

2、扫描所在包


补充一下:刚才大师和杨老遇到一个很艹蛋的问题,启动tocmat时一直在报

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.szkingdom.kisp.stock.MessageStockJob] is defined: expected single matching bean but found 2: com.szkingdom.kisp.stock.MessageStockJob#0,messageStockJob

很纳闷,这个类已经打了@component,并且扫描了,怎么会获取不到?换了类名就可以,这更说明是名字的问题了。怀疑是其他包的同类名,发现 没有,那就更奇怪了。最后的最后,在一个xml中发现了:<bean id = "...." class="....." >。这说明已经使用xml形式定义过了,就不能再用Component。

我们做了尝试:写了两个相同的 <bean id="...">,程序正常。一个<bean>和Component就报错。

猜想:两个相同的 <bean id="...">会覆盖,取最后一个为准,但是<bean>和Component可能不是这样的机制了。Spring的启动和加载机制挺复杂的。

其实一开始没有好好看异常的具体信息,只是在想为什么找不到,NoUniqueBean写得很清楚了,不是唯一的bean,如果早些注意到这个也许就会发现是不是在其他地方多次定义了它。

以后就不要在这种问题上吃亏了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常
Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常
15 0
Spring Boot + WebSocket 实时监控异常
此异常非彼异常,标题所说的异常是业务上的异常。 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理。 因为需要服务端主动向客户端发送消息,所以很容易的就想到了用WebSocket来实现这一功能。
183 0
Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping中。
107 0
在使用SSH+Spring开发webservice ,报的一些异常及处理方法
在使用SSH+Spring开发webservice ,报的一些异常及处理方法
88 0
Spring Boot + Web Socket 打造实时监控异常,写得太好了!
Spring Boot + Web Socket 打造实时监控异常,写得太好了!
139 0
Spring Boot 统一参数校验、统一异常、统一响应,这才是优雅的处理方式!
Spring Boot 统一参数校验、统一异常、统一响应,这才是优雅的处理方式!
356 0
Spring Boot 项目统一结果,统一异常,统一日志,写的太好了。。
Spring Boot 项目统一结果,统一异常,统一日志,写的太好了。。
75 0
Spring Boot之全局异常处理:404异常为何捕获不到?
Spring Boot之全局异常处理:404异常为何捕获不到?
714 0
简易的Spring/Boot接口定义,统一处理 (异常/识别码)
简易的Spring/Boot接口定义,统一处理 (异常/识别码)
48 0
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】(下)
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】(下)
264 0
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】(中)
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】(中)
177 0
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】(上)
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】(上)
187 0
web九大组件之---HandlerExceptionResolver异常处理器使用详解【享学Spring MVC】(下)
web九大组件之---HandlerExceptionResolver异常处理器使用详解【享学Spring MVC】(下)
175 0
web九大组件之---HandlerExceptionResolver异常处理器使用详解【享学Spring MVC】(中)
web九大组件之---HandlerExceptionResolver异常处理器使用详解【享学Spring MVC】(中)
229 0
web九大组件之---HandlerExceptionResolver异常处理器使用详解【享学Spring MVC】(上)
web九大组件之---HandlerExceptionResolver异常处理器使用详解【享学Spring MVC】(上)
222 0
+关注
无信不立
人无信不立,业不勤不精
文章
问答
视频
相关电子书
更多
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多