This question already has answers here:
Why is my Spring @Autowired field null?
(17个答案)
在16天前关闭。
在春季启动应用程序中,我试图加载yaml属性文件,并试图在@Autowire注释中的此类中使用该类,而在另一个类中获取null指针除外
在上面的构造函数中,可以在加载时在构造函数中打印,但是在击中rest端点时会得到空指针异常
@零件
公共类IhubStrategyFactory {
// IhubStrategy strategy = null;
//策略=新的TopologyResponse();
}
}
(17个答案)
在16天前关闭。
在春季启动应用程序中,我试图加载yaml属性文件,并试图在@Autowire注释中的此类中使用该类,而在另一个类中获取null指针除外
@Component
@Slf4j
@Data
public class ServiceGridConfiguration {
public AdapterConfig adapterConfig;
public ServiceGridConfiguration() {
Yaml yaml = new Yaml();
String yamlFile ="ServiceGrid.yaml";
try {
AdapterConfig adapterConfig = yaml.loadAs( ServiceTypeResolver.class.getClassLoader()
.getResourceAsStream(yamlFile),AdapterConfig.class );
System.out.println("adapterConfig" + adapterConfig.getSeedGroup());
this.adapterConfig = adapterConfig;
} catch (Exception e) {
log.error("Error in reading adapterConfig file "+yamlFile,e);
}
}
}
在上面的构造函数中,可以在加载时在构造函数中打印,但是在击中rest端点时会得到空指针异常
public class ServiceGrid implements IhubStrategy {
@Autowired
ServiceGridConfiguration sfg;
@Override
public void processRequest(String message) throws Exception {
System.out.println("ServiceGrid "+message+"*******"+sfg.getAdapterConfig().getSeedEntity());
}
}
@零件
公共类IhubStrategyFactory {
@Autowired
ServiceGridConfiguration sfg;
@Autowired
ServiceGrid sg;
public IhubStrategy getIhubStrategy(String serviceDefinition) {
System.out.println("IhubStrategyFactory : "+sfg.getAdapterConfig().getSeedEntity());
// IhubStrategy strategy = null;
if (serviceDefinition.equalsIgnoreCase("serviceGrid")) {
return new ServiceGrid();
/*try {
sg.processRequest("serviceGrid");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
} else if (serviceDefinition.equalsIgnoreCase("TopologyResponse")) {
//策略=新的TopologyResponse();
}
return null;
}
}
@Component
public class IhubStrategyFactory {
@Autowired
ServiceGridConfiguration sfg;
@Autowired
ServiceGrid sg;
public IhubStrategy getIhubStrategy(String serviceDefinition) {
System.out.println("IhubStrategyFactory : "+sfg.getAdapterConfig().getSeedEntity());
// IhubStrategy strategy = null;
if (serviceDefinition.equalsIgnoreCase("serviceGrid")) {
return new ServiceGrid();
/*try {
sg.processRequest("serviceGrid");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
} else if (serviceDefinition.equalsIgnoreCase("TopologyResponse")) {
// strategy = new TopologyResponse();
}
return null;
}
}
最佳答案
您必须使用@Componenet或@Service注释ServiceGrid,因为此刻它尚未在Spring Context中加载,并且ServiceGridConfiguration无法自动装配。
@Service
public class ServiceGrid implements IhubStrategy {
@Autowired
ServiceGridConfiguration sfg;
@Override
public void processRequest(String message) throws Exception {
System.out.println("ServiceGrid "+message+"*******"+sfg.getAdapterConfig().getSeedEntity());
}
}
09-20 22:20