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