java - 没有@Primary,Spring @Qualifier 无法工作

标签 java spring spring-mvc spring-boot

<分区>

因此,我正在尝试学习使用 Spring Boot 的方法。我尝试了@Qualifier 和@Autowired,但它给了我以下错误:

Parameter 0 of constructor in io.cptpackage.springboot.bootdemo.BinarySearch required a single bean, but 2 were found:

即使我提供了正确的@Qualifier,它也不起作用,直到其中一个依赖项具有@Primary 注释,而且名称引用也不起作用我使用@Primary 或@Qualifier 你知道我是@Qualifier 有问题。代码很简单,如下。

@Component 
public class BinarySearch {

// Sort, Search, Return the result!
@Autowired
@Qualifier("quick")
Sorter sorter;

public BinarySearch(Sorter sorter) {
    super();
    this.sorter = sorter;
}

public int search(int[] numbersToSearchIn, int targetNumber) {
    sorter.sort(numbersToSearchIn);
    return targetNumber;
 } 
}

第一个依赖:

@Component
@Qualifier("bubble")
public class BubbleSort implements Sorter {

    @Override
    public int[] sort(int[] targetArray) {
        System.out.println("Bubble sort!");
        return targetArray;
    }

}

第二个依赖:

@Component
@Qualifier("quick")
public class QuickSort implements Sorter {

    @Override
    public int[] sort(int[] targetArray) {
        System.out.println("Quick Sort!");
        return targetArray;
    }

}

另外,为什么按名称 Autowiring 不起作用?

最佳答案

@Qualifier 是一个注解,用于指定您需要注入(inject)的bean,它与@Autowired 配合使用。

如果你需要指定一个组件的名称,只需输入一个名称 @Component("myComponent") 然后当你需要注入(inject)它时使用 @Qualifier("myComponent")

对于你的问题试试这个:

代替:

@Component
@Qualifier("bubble")
public class BubbleSort implements Sorter {

使用这个:

@Component("quick")
public class BubbleSort implements Sorter {

最后定义一种注入(inject) bean 的方法,例如:

选项一:构造函数参数

@Component 
public class BinarySearch {

// Sort, Search, Return the result!
private final Sorter sorter;

public BinarySearch(@Qualifier("quick")Sorter sorter) {
    super();
    this.sorter = sorter;
}

作为类(class)成员的选项 2

@Component 
public class BinarySearch {

// Sort, Search, Return the result!
@Autowired
@Qualifier("quick")
Sorter sorter;

public BinarySearch() {
    super();

}

关于java - 没有@Primary,Spring @Qualifier 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45910669/

相关文章:

java - 当相关测试标记为通过时,TestNG 跳过 @Test

java - Jersey + Hibernate 将 SessionFactory 注入(inject) DAO

java - 从 http 链接映射 http 参数

Java Webapp 找不到本地服务器目录

java - 内存不足 - 位图大小超出 VM 预算

java - tomcat 7 - @GET 方法与@ApplicationPath - 状态 404 错误

java - 在 Spring 框架中使用 registerShutdownHook()

java - 将 Spring 属性占位符与 Jersey @Path 和 @ApplicationPath 一起使用

java - 如何在 Play 中将动态表单字段绑定(bind)到 HashSet!用Java?

java - EJB3、JPA 错误,从 Query.getSingleResult() 返回了多个结果