Spring-avons-nous besoin de spécifier le bean en xml si nous utilisons l'annotation, est-il nécessaire d'utiliser un id de bean en xml si nous utilisons l'annotation @aurowired

public class TextEditor {
  @Autowired
  private SpellChecker spellChecker;
  public TextEditor() {
     System.out.println("Inside TextEditor constructor." );
  }
  public SpellChecker getSpellChecker( ){
     return spellChecker;
  }
  public void spellCheck(){
     spellChecker.checkSpelling();
  }
}

Contexte d'application

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

 <context:annotation-config/>

 <!-- Definition for textEditor bean without constructor-arg  -->
 <bean id="textEditor" class="com.tutorialspoint.TextEditor">
 </bean>

 <!-- Definition for spellChecker bean -->
 <bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
 </bean>

</beans>
1
Ann 25 janv. 2017 à 09:37

4 réponses

Meilleure réponse

Pour définir un bean géré, vous

  • le définir en XML
  • utiliser l'annotation @Component ou @Service sur la classe du bean et context:component-scan appropriée en XML

Pour l'utiliser, vous

  • déclarer la dépendance en XML
  • utiliser l'annotation @Autowired

Si vous souhaitez utiliser l'une des annotations, vous avez besoin de context:annotation-config en XML.

Il vous suffit d'attribuer un identifiant au bean si vous voulez y faire référence, que ce soit en XML ou dans l'annotation @Qualifier lors du câblage automatique.

1
Jiri Tousek 25 janv. 2017 à 07:08

Ajoutez une analyse de composant au XML avec le package et annotez TextEditor et SpellChecker avec @Component en haut.

<context:component-scan base-package="com.tutorialspoint" />

Ensuite, vous n'avez pas besoin de définir de bean sur le fichier XML.

1
shazin 25 janv. 2017 à 06:47

@aurowired par défaut de fils automatiques par type. si tu utilises

<bean  class="com.tutorialspoint.SpellChecker"> 
</bean>

Cela fonctionnera lorsque le ressort injecte le haricot par type. Mais si vous créez 2 haricots

<bean id ="spell1" class="com.tutorialspoint.SpellChecker">
 </bean>
<bean id ="spell2" class="com.tutorialspoint.SpellChecker">
 </bean>

Cela ne fonctionnera pas car il existe deux beans du même type. Vous devez utiliser @qualifier.

1
Hiccup 25 janv. 2017 à 07:29

Il n'est pas nécessaire de déclarer chaque bean dans le contexte de votre application. Vous pouvez utiliser le composant-scan et fournir votre package de base contenant tous les beans.

<context:annotation-config />
    <context:component-scan base-package="com.package" />

Et utilisez la balise @Service pour chaque classe que vous souhaitez câbler automatiquement.

2
shubham 25 janv. 2017 à 06:48