Printemps @Autocâblés constructeur ne donne Pas de constructeur par défaut constaté
Un comportement étrange depuis le Printemps 3.0 ici.
package com.service.schedule;
import org.springframework.stereotype.Component;
@Component("outroJob")
public class OutroJob {
public void printMe() {
System.out.println("running...");
}
}
et
package com.service.schedule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
@Component("testeAutowired")
public class TesteAutowired {
@Autowired
public TesteAutowired(OutroJob outroJob) {
outroJob.printMe();
}
public static void main(String[] args) {
ClassPathResource res = new ClassPathResource("applicationContext.xml");
XmlBeanFactory ctx = new XmlBeanFactory(res);
OutroJob outroJob = (OutroJob) ctx.getBean("outroJob");
outroJob.printMe(); //gives: running...
ctx.getBean("testeAutowired");
}
}
Aucun de ces haricots sont déclarés sur applicationContext.xml
Donc, ligne outroJob.printMe(); fonctionne très bien... imprime "en cours..."
Mais quand j'essaie d'obtenir le "testeAutowired" bean, il dit:
Peut pas instancier la classe d'haricot
[com.service.l'horaire.TesteAutowired]: Pas de constructeur par défaut constaté;
nested exception java.lang.NoSuchMethodException:
com.service.l'horaire.TesteAutowired.
La question est: pourquoi, si le Printemps trouvé le "outroJob" bean il n'a pas autocâblés sur le TesteAutowired constructeur ?
Il semble évident que ce qu'il a à faire...
Qu'advient-il si vous utilisez ApplicationContext au lieu de XmlBeanFactory? Je vois XmlBeanFactory est supprimée de la version 3.1, c'est peut-être une des raisons.
OriginalL'auteur chuckedw | 2011-12-01
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser ApplicationContext au lieu de XmlBeanFactory. XmlBeanFactory n'a pas de post-traiter les annotations ie n'utilisez pas AutowiredAnnotationBeanPostProcessor qui pourrait expliquer le comportement que vous rencontrez.
Voici quelques explications
OriginalL'auteur soulcheck
Essayez d'utiliser
Qui devrait Ressort à force d'utiliser ce constructeur. Sinon, il crée une liste de constructeurs et choisit le meilleur candidat. Apparemment, il veut vraiment un constructeur par défaut en tant que candidat, je suppose.
Référence: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.html
required
esttrue
. I. e.@Autowired
==@Autowired(required=true)
OriginalL'auteur Nialscorva
Créer une section pour le composant et essayer de autowire l'interface et de nore de la classe avec l'autocâblés constructeur.
OriginalL'auteur Kfir Bloch
Je reçois le même message d'erreur mais ont le problème est différent. J'ai été en utilisant XML de configuration et de mettre
@Autowired
sur le constructeur de la classe.J'ai résolu ce problème en permettant l'annotation conduit config dans mon fichier de configuration XML:
OriginalL'auteur csharpfolk