web-dev-qa-db-fra.com

Comment effectuer un câblage automatique par nom au printemps avec des annotations?

J'ai plusieurs beans de la même classe définis:

  @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;
  }

par conséquent, lorsque je les ai câblés automatiquement

   @Autowired
   public FieldDescriptor fullSpotField;

   @Autowired
   public FieldDescriptor annotationIdField;

J'ai une exception

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

Comment autowire par nom comme il est possible dans la configuration XML?

18
Dims

Vous pouvez utiliser @Qualifer pour le résoudre.

Dans votre cas, vous pouvez réaliser:

 @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;
  }

et ensuite vous pouvez injecter en utilisant:

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

   @Autowired
   @Qualifier("annotationIdSpot")
   public FieldDescriptor annotationIdField;