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

标签 java spring autowired default-constructor

这里是 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 来解释您遇到的行为。

Here's some more explanation

关于java - Spring @Autowired 构造函数给出没有找到默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335272/

相关文章:

java - 这是一个java boolean 值可以为空的场景吗?为什么这段代码会编译?

java - Android 运行时出现 NullPointerException 错误

java - Spring 安全,JUnit : @WithUserDetails for user created in @Before

java - 将 Spring Java8 Junit 测试转换为 Kotlin 时摆脱 lateinit

Java,从另一个框架/类关闭一个框架

java - 将服务帐户与数据流结合使用 - 出现 storage.objects.get 访问错误

java - 为什么oldCartRemovalJob 被放置在<custom-name>commercewebservices 中?

java - 导入 Web 项目时出现“无法解析为类型”错误

java - Jax-ws、spring 和 SpringBeanAutowiringSupport

spring - 如何使用注释 Autowiring factorybean 实例(不是 getObject() 对象)?