autowire在抽象类中为null

时间:2017-05-20 12:53:29

标签: java spring autowired

我有一个问题是在我的抽象基类中自动装配一个对象。它总是给我null而不是实例。请帮忙。

基类:

public abstract class BaseClass implements IReq<Req> {

    @Autowired
    protected ReqDao dao;

    protected void updateReq() {
         dao.update();
    } 
}

儿童班:

@Component
public class ChildClass extends BaseClass {
    ...
}

ReqDao课程:

@Component
public class RptRequestDao {
     public void update(){
          ...
     }
}

我想在Base类中使用update()函数,这意味着在我的ChildClass中,我不会覆盖那个。这是问题吗?如果是,那么通常的做法是什么?提前致谢。

4 个答案:

答案 0 :(得分:0)

在您初始化对象时,按需创建bean, RepoDao是私有的,所以它不会被固有的类本身,你要么需要把

@Component
public class ChildClass extends BaseClass {
    @Autowired
    private ReqDao dao;

或在BaseClass中使其受保护/公开,确保public会使其可以访问违反封装的其他类

答案 1 :(得分:0)

使用@Autowired实例化您的子类

public class SomeClass{

@Autowired
ChildClass childClass; //IMPORTANT

}

当您尝试实例化childClass时发生错误:

public class SomeClass{

ChildClass childClass = new ChildClass();

}

答案 2 :(得分:-1)

BaseClass是抽象的,你可以实例化它。你需要在ChildClass中使用你的ReqDao进行自动装配。弹簧只会在它创建该类的实例时自动装配。希望帮助

答案 3 :(得分:-1)

检查如何实例化子类。确保您没有使用“ new”关键字来实例化子类。

ChildClass cc = new ChildClass() // Not recommended

您必须自动装配子类,并让spring负责bean的创建。