还有另一个名为@Primary的注解,我们也可以用来发生依赖注入的歧义时决定要注入哪个bean。当存在多个相同类型的bean时,此注解定义了项。除非另有说明,否则将使用与@Primary注释关联的bean 。我们来看一个例子:
在此示例中,两个方法都返回相同的Employee类型。Spring将注入的bean是方法tonyEmployee返回的bean。这是因为它包含@Primary注解。当我们想要指定默认情况下应该注入特定类型的bean时,此注解很有用。如果我们在某个注入点需要另一个bean,我们需要专门指出它。我们可以通过@Qualifier注解来做到这一点。例如,我们可以通过使用@Qualifier注解来指定我们想要使用johnEmployee方法返回的bean 。值得注意的是,如果@Qualifier和@Primary注释都存在,那么@Qualifier注释将具有优先权。基本上,@ Primary是定义了默认值,而@Qualifier则非常具体。当然@Component也可以使用@Primary注解,这次使用的还是上面3的示例:
在这种情况下,@ Primary注解指定了默认注入的是FooFormatter,消除了场景中的注入歧义。