Je viens d'apprendre le cadre de printemps et j'utilise le printemps 2.5 pour cet apprentissage. J'ai créé trois haricots avec ces classes
nourriture.java p> nasigoreng.java p> renduang.java p> pecintakuliner.java p> configuration XML, qualificatif-test.xml p> Enfin, la classe avec la méthode principale est QualifierestMain.java:package com.spring.danipetrick;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class QualifierTestMain {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("/qualifier-test.xml");
PencintaKuliner bondan = (PencintaKuliner)context.getBean("bondan");
bondan.sayMaknyus();
}
}
4 Réponses :
Votre méthode et votre champ sont annotés avec qui fonctionnera car la cible d'injection est qualifiée. P> la méthode cependant p> ne qualifie pas le paramètre d'injection, le ressort ne sait pas quel haricot à injecter. p> Modifiez ce qui précède sur P> @autowired code>. En tant que tel, le printemps tentera d'injecter les deux. Sur l'une des pistes, il essaiera d'injecter
@Autowired
public void setFood(@Qualifier("nasigoreng") Food food) {
this.food = food;
}
Je me débarrasse de @aotowired. Je pense que cela ne sait toujours pas quel haricot utiliser. L'erreur devient comme ceci: Exception dans le fil "Main" Java.Lang.NullPointereException à com.spring.danipetrick.pencintakinuer.saymaknyus (Pencintaku Liner.java:20) à com.spring.danipetrick.qualifiertestmain.main ( Qualifierestme ain.java:11) code>
@Dani n'a pas vu la méthode annotée. J'ai édité ma réponse pour clarifier.
Essayez uniquement de supprimer comme p> @autowired code> à partir de
setFood () code> dans
pecintakuliner code>
@Autowired
@Qualifier("nasigoreng")
private Food food;
public void setFood(Food food) {
this.food = food;
}
Hey ça marche. Pouvez-vous me dire comment ça marche? Merci sandhu :)
Vous ne pouvez pas utiliser d'annotations sur les deux niveaux et les champs en même temps. Utilisez-le avec des champs ou avec un réglage.
@Sandhu techniquement vous pouvez. C'est juste redondant.
J'ai essayé avec le printemps 4.2.4. Problème résolu juste en ajoutant
Essayez de vous retirer du constructeur de la classe Nasigoreng. Cela a fonctionné pour moi. P>
Oui ça a fonctionné !!! Mais je n'ai pas compris pourquoi le constructeur causerait un problème?
J'ai eu un problème similaire injectant deux fois la dépendance dans un service par le constructeur (AllargSconstructeur de Lombok) et sur le terrain.