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的东西。代码很简单,如下所示。
第一个依赖项:
第二个依赖项:
另外,为什么按名称自动布线不起作用?
用这个:
最后,定义一种注入(inject)bean的方法,例如:
选项1:构造函数参数
选项2作为类(class)成员
(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