Java 在spring中使用@Qualifier注释和直接注入bean有什么区别?
假设我有一个程序Java 在spring中使用@Qualifier注释和直接注入bean有什么区别?,java,spring,Java,Spring,假设我有一个程序 @Component public interface Coach{ public String giveCoaching(); } @Component public TennisCoach implements Coach{ @Override public String giveCoaching(){ return "Teaching forhand"; } } 我有两个演示类,其中我以不同的方式注入了bean。两种注射有什么区别 public
@Component
public interface Coach{
public String giveCoaching();
}
@Component
public TennisCoach implements Coach{
@Override
public String giveCoaching(){
return "Teaching forhand";
}
}
我有两个演示类,其中我以不同的方式注入了bean。两种注射有什么区别
public class AppDemo{
@AutoWired
@Qualifier("tennisCoach")
private Coach theCoach;
}
public class AppDemo{
@AutoWired
private TennisCoach tennisCoach;
}
}
当您的接口有多个实现时,自动连接bean时会出现异常。此时将使用
@限定符选择所需的实现
@Component
public interface Coach{
public String giveCoaching();
}
@Component
public TennisCoach implements Coach{
@Override
public String giveCoaching(){
return "Teaching forhand";
}
}
@Component
public CricketCoach implements Coach{
@Override
public String giveCoaching(){
return "Teaching forbat";
}
}
现在,当您自动连接Coach
界面时,就会出现歧义,如下所示
public class AppDemo{
@AutoWired
private Coach theCoach;
}
因此,您必须为Coach
接口限定合适的bean,如下所示
public class AppDemo{
@AutoWired
@Qualifier("tennisCoach")
private Coach theCoach;
}
或者,您可以在任何一个实现之上使用@Primary
注释,以便在一个接口有多个实现的情况下,Spring容器将默认选择bean
但是在下面的代码中,您直接为实现而不是接口创建对象
public class AppDemo{
@AutoWired
private TennisCoach tennisCoach;
}
}
@Qualifier
注释在您的接口有多个实现类时使用,您应该选择要在spring上下文中作为bean注入的类。字段名称不同。您可能不希望字段名与bean实现名相同。在一个实现中,我将使用@Qualifier进行注入,在另一个实现中,我将直接注入bean。我的问题是:“有什么区别吗?”两个实现是否具有相同的行为?