首页 > 解决方案 > 在抽象类的 @Autowired 字段中获取 null

问题描述

我有一个抽象类,并由几个子类继承。在另一个类中,我得到类名并需要实例化该类以调用父(抽象)类中的基方法。但是我在基本方法中使用的@Autowired 字段“缓存”中得到了空值。className 是来自前端的输入字段。所以我认为我必须实例化一个新对象才能调用该方法。提前致谢!

public abstract class Data(){
   @Autowired protected Cache cache;

   private Abc getDataContent(){
      if(cache.containsKey()){
        //do something
      }else{
        //do something else
      }
    }    
}

public class Data1 extends Data(){
  public Data1(){
    super();
  }
}

public class Data2 extends Data(){
  public Data2(){
    super();
  }
}


public class Resource(){

  public Abc getContent(){
    Class<Data<?>> className = getClassName();
    //className  will be the classCanonicalName of Data1 or Data2;

    return className.newInstance().getDataContent();
  }

}

标签: springcomponentsautowired

解决方案


为了避免空字段,你需要让spring管理bean(对象),一个简单的方法是在and上使用@Component注解。Data1Data2

另外,请注意,如果您手动实例化一个对象(例如new Data1();),那么 Spring 将不知道该实例;


推荐阅读