这里是 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");
}
}
这些 bean 都没有在 applicationContext.xml 上声明
因此,行 outroJob.printMe();工作正常...打印“正在运行...”
但是当我尝试获取“testeAutowired”bean 时,它说:
Could not instantiate bean class [com.service.schedule.TesteAutowired]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.service.schedule.TesteAutowired.
问题是:为什么,如果 Spring 找到“outroJob”bean,它不会在 TesteAutowired 构造函数上 Autowiring 它?
它必须做什么似乎很明显......
最佳答案
尝试使用 ApplicationContext 而不是 XmlBeanFactory。 XmlBeanFactory 不对注释进行后处理,即不使用 AutowiredAnnotationBeanPostProcessor 来解释您遇到的行为。
关于java - Spring @Autowired 构造函数给出没有找到默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335272/