spring - 在抽象类的 @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();
}
}
解决方案
为了避免空字段,你需要让spring管理bean(对象),一个简单的方法是在and上使用@Component
注解。Data1
Data2
另外,请注意,如果您手动实例化一个对象(例如new Data1();
),那么 Spring 将不知道该实例;
推荐阅读
- android - 如何从另一个应用程序在 Zoom Room 应用程序中加入会议
- python - 如何使用 Beautiful Soup 从 Google 表单中提取“entry.id”?
- kubernetes - 在 Windows 上降级 minikube 版本
- flutter - 使用setState时如何渲染没有父母的孩子?
- msix - MSIX .appinstaller 安装失败,但相应的 msixbundle 安装正常
- php - 合并 PHP 集合对象中的键值
- php - 错误:无法连接。SQLSTATE[HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:YES)
- java - 对象列表中的连接参数
- azure-service-fabric - Service Fabric:将枚举类移动到不同的项目
- css - 如何在反应中正确定位超过 100% 的宽度