`

spring @Autowire 的注解默认是按类型注入bean

 
阅读更多

spring @Autowire 的注解默认是按类型注入bean,比如下面这个类

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
@Repository
public class FloorGenerator {
	@Autowired
	private DataSource floorGenDataSource;
	@Autowired
	private TopicDao topicDao;
	@Autowired
	private TopicXDB topicXDB;
	
        //some method here...

}

 floorGenDataSource是DataSource类型,在注入floorGenDataSource的时候,如果相同类型的DataSource已经注入很多个 bean,这时候报会异常:

No unique bean of type [com.a.b.BaseDao] is defined: expected single matching bean but found 2: [dataSource, userDataSource]

意思是按类型注入的时候,有两个DataSource类型的bean,spring不知道帮你注入哪个,所以报异常。

解决方案很简单,不让按类型注入,按名称注入就可以了。

在private DataSource floorGenDataSource;上面写好@Qualifier,并注明按哪个名称的bean注入,如:

 

@Repository
public class FloorGenerator {
	@Autowired
    @Qualifier("dataSource")
	private DataSource floorGenDataSource;
	@Autowired
	private TopicDao topicDao;
	@Autowired
	private TopicXDB topicXDB;
	
        //some method here...

}

 

 

 

分享到:
评论
2 楼 masuweng 2017-08-11  
     
1 楼 masuweng 2017-08-11  
      

相关推荐

    (转)Spring中@Autowired注解和@Resource注解的区别

    它主要基于类型匹配,Spring会尝试找到与目标字段或方法参数类型相同的bean来注入。如果找到多个候选bean,可以通过指定`@Qualifier`来指定特定的bean。此外,`@Autowired`默认是要求必须找到匹配的bean,如果没有...

    Spring实战之@Autowire注解用法详解

    Spring实战之@Autowire注解用法详解 Spring是一个流行的Java...@Autowire注解是Spring框架中一个非常有用的功能,可以自动装配Bean,简化开发过程。但是,需要正确地配置Spring框架和DAO接口,否则可能会出现问题。

    20 面试官,请不要再问我@Resource和@Autowire注解的区别了慕课专栏(1)1

    `@Resource`注解通常用于按名称注入,它遵循JavaBeans规范,通过属性名来查找并注入匹配的bean。这意味着如果你有一个名为`myService`的bean,你可以在另一个bean中使用`@Resource`注解来注入这个`myService`: ```...

    Spring@Autowired注解与自动装配.rar

    默认情况下,`@Autowired`会尝试按类型匹配,并且如果找不到匹配的bean,它会抛出异常。但如果被注解的字段、方法或构造函数是可选的(即,可为null),那么Spring会安静地跳过未找到的依赖。 ### 2. 使用场景 - **...

    spring-autowire.zip

    如果存在多个同类型的bean,可以通过`@Qualifier`注解指定具体的bean,或者通过`@Primary`标记一个bean为默认首选。 此外,我们还可以在构造器中使用@Autowired,这样在实例化Person时,Spring就会自动调用带参数的...

    关于Spring注解@Async引发其他注解失效的解决

    Spring @Async 注解引发其他注解失效的解决 Spring 框架提供了多种注解来帮助开发者简化代码,例如 @Async 用于异步执行方法、@Transaction 用于事务管理等。但是,在使用这些注解时,可能会遇到一些问题,例如 @...

    spring-autowire-demo.zip

    如果一个bean的属性类型与Spring容器中其他bean的类型相匹配,Spring会自动将匹配的bean注入。比如,如果一个类有一个`List<Database>`类型的属性,Spring会查找类型为`Database`的bean,并将其注入。如果有多个...

    解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题

    在Spring Boot项目中,我们通常使用@Autowired注解来注入bean对象,但是当我们使用多线程处理任务时,经常会遇到无法注入bean的问题。这是因为多线程处理任务会创建新的线程,而新的线程中无法注入bean对象。 解决...

    autowire自动导入句柄

    在Spring框架中,`autowire`是一种自动装配bean依赖的方式,它极大地简化了bean之间的依赖注入过程。本文将深入探讨`autowire`自动导入句柄及其在实际开发中的应用。 ### 1. `autowire`简介 `autowire`是Spring...

    3Spring使用annotation方式autowire

    当Spring扫描到这个注解时,它会尝试找到类型匹配的Bean进行注入。例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; } ``` 在这个例子中,Spring会寻找...

    Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

    默认按类型匹配,也可以通过@Qualifier注解指定bean的名称。 4. 如果找到多个匹配的bean,可以使用@Primary注解指定首选bean,或者使用@Qualifier注解精确匹配。 5. 最后,执行实际的注入操作,如设置字段值、调用...

    自动装配 AutoWire

    - **按类型匹配**:默认情况下,Spring会根据bean的类型来查找匹配的依赖。如果存在多个相同类型的bean,可以通过`@Qualifier`注解指定具体的bean。 ```java @Autowired @Qualifier("specificMyService") private ...

    多线程Autowire注入null的解决方案.docx

    在 Spring 项目中,多线程 Autowire 注入 null 的问题是一个常见的问题。当我们在多线程中使用 @Autowired 注解时,可能会出现 null 的情况。这是因为多线程是防注入的,容器中的组件不会自动注入到多线程中。 解决...

    如何完成spring的最小化XML配置

    `@Resource`注解主要用于注入JSR-250资源,如JNDI绑定的对象,也可以用于注入Bean,但默认按名称装配。 三、使用注解装配的注意事项 - 当多个Bean符合`@Autowired`的条件时,可以使用`@Qualifier`指定具体的Bean...

    Spring-Framework-Notes-For-Professionals.pdf

    - 也可以声明性地定义Bean,并通过@Autowire注解自动注入依赖。 - Spring支持将原型作用域的Bean注入单例作用域的Bean中。 6. Spring Bean的作用域 - Spring容器中的Bean可以有不同的作用域。 - 默认作用域是...

    Spring实现自动装配

    这种方式默认是按类型匹配,如果存在多个相同类型的bean,可以通过`autowire-candidate`属性排除某些bean。 2. **基于类型的自动装配(By Type Auto-Wiring)**:这是最常用的自动装配方式,Spring会查找与目标bean...

    Spring学习笔记之二“属性注入”

    属性注入是指Spring容器通过XML配置或者基于注解的方式,将外部资源(如其他bean、数据库连接、配置信息等)设置到目标bean的属性中。这种方式降低了对象间的耦合度,使得程序更易于管理和测试。 2. **XML配置中的...

    spring bean 属性总结

    ### Spring Bean 属性详解 Spring框架是Java平台上的一个开源框架,主要用来简化企业级应用程序的开发。在Spring中,核心概念之一就是Bean,它是一个简单的Java对象,由Spring IoC容器管理。Spring通过XML配置文件...

    pring自动装配方式介绍共2页.pdf.zip

    8. **@Qualifier**:在有多个相同类型Bean的情况下,`@Qualifier`注解可以用来指定确切的Bean名称,以便Spring知道应该注入哪个。 9. **@Autowired required**:`@Autowired`注解默认的`required`属性为`true`,...

Global site tag (gtag.js) - Google Analytics