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,如果早些注意到这个也许就会发现是不是在其他地方多次定义了它。

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

相关文章
|
27天前
|
XML Java 数据库连接
spring boot 参数的过滤注解与实战
在Spring Boot应用中,对于入参的过滤,通常会涉及到对Web层的数据验证和处理。Spring Boot借助Spring框架提供了强大的验证框架支持,主要基于JSR-303/JSR-380(Bean Validation API)规范,以及Spring自身的@Valid或@Validated注解来实现请求参数的验证。以下是一些常见的使用案例来展示如何对参数进行过滤和验证。
24 1
|
1月前
|
Java Spring 容器
【Java】Spring如何扫描自定义的注解?
【Java】Spring如何扫描自定义的注解?
34 0
|
1月前
|
Java 测试技术 数据库
SpringBoot:@Profile注解和Spring EL
SpringBoot:@Profile注解和Spring EL
|
1月前
|
存储 缓存 Java
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
|
1月前
|
Java 数据库 Spring
【spring(四)】Spring事务管理和@Transactional注解
【spring(四)】Spring事务管理和@Transactional注解
|
1月前
|
Java Spring 容器
Spring中@Autowired和@Resource注解异同点
Spring中@Autowired和@Resource注解异同点
31 0
|
6天前
|
XML Java 数据格式
进阶注解探秘:深入Spring高级注解的精髓与实际运用
进阶注解探秘:深入Spring高级注解的精髓与实际运用
22 2
|
6天前
|
XML Java 数据格式
从入门到精通:Spring基础注解的全面解析
从入门到精通:Spring基础注解的全面解析
22 2
从入门到精通:Spring基础注解的全面解析
|
10天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
12 0
|
1月前
|
前端开发 Java 数据安全/隐私保护
Spring Boot3自定义异常及全局异常捕获
Spring Boot3自定义异常及全局异常捕获
41 1