Cpt*_*age 5 java spring spring-mvc spring-boot
所以,我正在尝试用Spring Boot学习.我试过@Qualifier和@Autowired但它给了我以下错误:
io.cptpackage.springboot.bootdemo.BinarySearch中构造函数的参数0需要一个bean,但是找到了2个:
即使我提供了正确的@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;
}
}
Run Code Online (Sandbox Code Playgroud)
第一个依赖:
@Component
@Qualifier("bubble")
public class BubbleSort implements Sorter {
@Override
public int[] sort(int[] targetArray) {
System.out.println("Bubble sort!");
return targetArray;
}
}
Run Code Online (Sandbox Code Playgroud)
第二个依赖:
@Component
@Qualifier("quick")
public class QuickSort implements Sorter {
@Override
public int[] sort(int[] targetArray) {
System.out.println("Quick Sort!");
return targetArray;
}
}
Run Code Online (Sandbox Code Playgroud)
另外,为什么名称自动装配不起作用?
@Qualifier是一个注释,用于指定需要注入的bean,它与之一起使用@Autowired.
如果您需要指定一个组件的名称,只需输入一个名称@Component("myComponent"),然后在需要注入它时使用@Qualifier("myComponent")
对于你的问题,试试这个:
代替:
@Component
@Qualifier("bubble")
public class BubbleSort implements Sorter {
Run Code Online (Sandbox Code Playgroud)
用这个:
@Component("quick")
public class BubbleSort implements Sorter {
Run Code Online (Sandbox Code Playgroud)
最后定义一种注入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;
}
Run Code Online (Sandbox Code Playgroud)
选项2作为集体成员
@Component
public class BinarySearch {
// Sort, Search, Return the result!
@Autowired
@Qualifier("quick")
Sorter sorter;
public BinarySearch() {
super();
}
Run Code Online (Sandbox Code Playgroud)
小智 5
使用下面的代码
@Autowired
@Qualifier("quick")
Sorter sorter;
Run Code Online (Sandbox Code Playgroud)
你告诉 spring 排序器的实例应该符合“快速”bean 的条件。但在下面的构造函数中:
public BinarySearch(Sorter sorter) {
super();
this.sorter = sorter;
}
Run Code Online (Sandbox Code Playgroud)
您没有通知 spring 应该使用哪个 Sorter 实例。由于有 2 颗豆符合本次资格,因此 spring 抛出错误。因此,要么@Qualified("quick")在 Sorter arg 之前添加注释,要么从构造函数中删除 Sorter arg。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
4839 次 |
| 最近记录: |