Spring 3.0在這裏出現了一些奇怪的行爲。Spring @Autowired構造函數給出沒有找到默認構造函數
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");
}
}
這些bean都不是在applicationContext.xml中聲明
因此,線outroJob.printMe();正常工作......版畫「運行......」
但是,當我試圖讓「testeAutowired」豆,它說:
無法實例化bean類 [com.service.schedule。 TesteAutowired]:找不到默認構造函數; 嵌套異常是java.lang.NoSuchMethodException: com.service.schedule.TesteAutowired。
問題是:爲什麼如果Spring發現「outroJob」bean,它不會在TesteAutowired構造函數中自動裝配它?
它似乎很明顯它有什麼做的......
會發生什麼事,如果你使用的ApplicationContext代替XmlBeanFactory的?我發現3.1中已經棄用了XmlBeanFactory,也許這就是其中一個原因。 – soulcheck