Java spring-具有作用域原型的抽象类中的自动连接接口不起作用

Java spring-具有作用域原型的抽象类中的自动连接接口不起作用,java,spring,autowired,Java,Spring,Autowired,我有一个抽象类,其中我有一个抽象类atternate,我想将接口Trainer自动连接到该类中 atternate是Runnable,其实现覆盖了perform()方法 当我在sprint(扩展atternate)中调用perform()时,我想自动连接到atternate的Trainer实例仍然为空 运动员: @Component @Scope("prototype") public abstract class Athlete implements Runnable{ protec

我有一个抽象类,其中我有一个抽象类
atternate
,我想将接口
Trainer
自动连接到该类中

atternate
Runnable
,其实现覆盖了
perform()
方法

当我在
sprint
(扩展
atternate
)中调用
perform()
时,我想自动连接到
atternate
Trainer
实例仍然为空

运动员:

@Component
@Scope("prototype")
public abstract class Athlete implements Runnable{

    protected final String name;

    @Autowired protected Trainer trainer;


    public Athlete(String name)
    {
        this.name = name;
    }

    protected abstract void perform();

    @Override
    public void run() {
        perform();
    }
}
短跑运动员:

@Component
@Scope("prototype")
public class Sprinter extends Athlete {

    public Sprinter(String name) {
        super(name);
    }

    @Override
    protected void perform() 
    {
        this.trainer.giveAdviceTo(name); // TRAINER IS NULL !!!!!!
        for(int i=0;i<3;i++)
        {
            System.out.println("Sprinting...");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

感谢您的帮助

在我看来,在您的主类中,您正在自己创建这些对象

运动员a1=新短跑运动员(“亚当”)

Spring只能将对象自动关联到(托管)bean中。此时,Spring根本不知道您创建的Sprinter实例是否存在

当您让Spring为您创建bean时,它还将注入所有@Autowired依赖项

@Autowired
private BeanFactory beanFactory;


@Override
public void run(String... args) throws Exception {
    Sprinter adam = beanFactory.getBean(Sprinter.class, "adam");
    TennisPlayer roger = beanFactory.getBean(TennisPlayer.class, "roger");

    executor.execute(adam);
    executor.execute(roger);
}

在我看来,在主类中,您自己创建这些对象

运动员a1=新短跑运动员(“亚当”)

Spring只能将对象自动关联到(托管)bean中。此时,Spring根本不知道您创建的Sprinter实例是否存在

当您让Spring为您创建bean时,它还将注入所有@Autowired依赖项

@Autowired
private BeanFactory beanFactory;


@Override
public void run(String... args) throws Exception {
    Sprinter adam = beanFactory.getBean(Sprinter.class, "adam");
    TennisPlayer roger = beanFactory.getBean(TennisPlayer.class, "roger");

    executor.execute(adam);
    executor.execute(roger);
}

您正在尝试使用非默认构造函数(带参数的构造函数)创建bean对象。您可以在类中声明默认构造函数,或者如果您真的想用非默认构造函数创建bean实例,那么您可以这样做


您正在尝试使用非默认构造函数(带参数的构造函数)创建bean对象。您可以在类中声明默认构造函数,或者如果您真的想用非默认构造函数创建bean实例,那么您可以这样做