This question already has an answer here:
What is a NoSuchBeanDefinitionException and how do I fix it?

(1个答案)


3年前关闭。




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



即使我已经提供了正确的@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;
    }

}

另外,为什么按名称自动布线不起作用?

最佳答案

@Qualifier是用于指定需要注入(inject)的bean的注释,它与@Autowired一起使用。

ff您需要指定组件的名称,只需输入名称@Component("myComponent"),然后在需要注入(inject)时使用@Qualifier("myComponent")
对于您的问题,请尝试以下操作:

代替:

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

用这个:
@Component("quick")
public class BubbleSort implements Sorter {

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

选项1:构造函数参数
@Component
public class BinarySearch {

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

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

选项2作为类(class)成员
@Component
public class BinarySearch {

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

public BinarySearch() {
    super();

}

10-07 16:46