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

Dim*_*ims 18 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;
  }
Run Code Online (Sandbox Code Playgroud)

因此,当我自动给他们

   @Autowired
   public FieldDescriptor fullSpotField;

   @Autowired
   public FieldDescriptor annotationIdField;
Run Code Online (Sandbox Code Playgroud)

我得到一个例外

NoUniqueBeanDefinitionException: No qualifying bean of type [...FieldDescriptor] is defined: expected single matching bean but found ...
Run Code Online (Sandbox Code Playgroud)

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

Mad*_*apu 30

你可以@Qualifier用来解决它.

在您的情况下,您可以:

 @Bean(name="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("annotationIdSpot")
  // Same as above comment.
  public FieldDescriptor annotationIdField() {
     FieldDescriptor ans = new FieldDescriptor("annotationID", Integer.class);
     return ans;
  }
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下注入:

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

   @Autowired
   @Qualifier("annotationIdSpot")
   public FieldDescriptor annotationIdField;
Run Code Online (Sandbox Code Playgroud)

  • 我发现在bean创建方法附近不需要`@ Qualifier`,只需添加这个注释和`@Autowired`就足够了 (2认同)