Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring中使用@Qualifier注释和直接注入bean有什么区别?_Java_Spring - Fatal编程技术网

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。我的问题是:“有什么区别吗?”两个实现是否具有相同的行为?