如何使用注释在Spring中按名称自动装配?

时间:2016-03-23 16:27:28

标签: java spring autowired

我定义了几个相同类的bean:

  @Bean
  public FieldDescriptor fullSpotField() {
     FieldDescriptor ans = new FieldDescriptor("full_spot", String.class);
     return ans;
  }

  @Bean
  public FieldDescriptor annotationIdField() {
     FieldDescriptor ans = new FieldDescriptor("annotationID", Integer.class);
     return ans;
  }

因此当我自动装载它们时

   @Autowired
   public FieldDescriptor fullSpotField;

   @Autowired
   public FieldDescriptor annotationIdField;

我得到了一个例外

NoUniqueBeanDefinitionException: No qualifying bean of type [...FieldDescriptor] is defined: expected single matching bean but found ...

如何在XML配置中按名称自动装配?

1 个答案:

答案 0 :(得分:29)

您可以使用@Qualifer来解决此问题。

在您的情况下,您可以:

 @Bean
 @Qualifier("fullSpot") // Not mandatory. If not specified, it takes the method name i.e., "fullSpotField" as qualifier name.
  public FieldDescriptor fullSpotField() {
     FieldDescriptor ans = new FieldDescriptor("full_spot", String.class);
     return ans;
  }

  @Bean
  @Qualifier("annotationIdSpot") // Same as above comment.
  public FieldDescriptor annotationIdField() {
     FieldDescriptor ans = new FieldDescriptor("annotationID", Integer.class);
     return ans;
  }

然后你可以使用:

注入
   @Autowired
   @Qualifier("fullSpot")
   public FieldDescriptor fullSpotField;

   @Autowired
   @Qualifier("annotationIdSpot")
   public FieldDescriptor annotationIdField;
相关问题