Здесь немного странное поведение Spring 3.0.
package com.service.schedule;
import org.springframework.stereotype.Component;
@Component("outroJob")
public class OutroJob {
public void printMe() {
System.out.println("running...");
}
}
и
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");
}
}
Ни один из этих компонентов не объявлен в applicationContext.xml
Итак, строка outroJob.printMe ();работает нормально ... печатает "выполняется ..."
Но когда я пытаюсь получить бин "testeAutowired", он говорит:
Не удалось создать экземпляр класса бина [com.service.schedule.TesteAutowired]: конструктор по умолчанию не найден;вложенным исключением является java.lang.NoSuchMethodException: com.service.schedule.TesteAutowired.
Вопрос: почему, если Spring обнаружил bean-компонент outroJob, он не подключается автоматически к конструктору TesteAutowired?
Кажется очевидным, что он должен делать ...