加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring @Autowired构造函数给出没有找到默认构造函数

发布时间:2020-12-15 02:29:36 所属栏目:Java 来源:网络整理
导读:这里有一些来自 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.ser
这里有一些来自 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构造函数上自动启动它?

它显然需要做什么……

解决方法

尝试使用ApplicationContext而不是XmlBeanFactory. XmlBeanFactory不会后处理注释,即不使用AutowiredAnnotationBeanPostProcessor来解释您遇到的行为.

Here’s some more explanation

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读