gpt4 book ai didi

java - Spring 启动: Load property file in constructor and use as autowire annotation

转载 作者:行者123 更新时间:2023-12-02 08:44:40 26 4
gpt4 key购买 nike

在 Spring Boot 应用程序中,我尝试加载 yaml 属性文件,并尝试在另一个类中使用 @Autowire 注释获取空指针异常

@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);
}

}

}

在上面的构造函数中,能够在加载时在构造函数中打印,但在命中休息端点时出现空指针异常

public class ServiceGrid implements IhubStrategy {

@Autowired
ServiceGridConfiguration sfg;


@Override
public void processRequest(String message) throws Exception {
System.out.println("ServiceGrid "+message+"*******"+sfg.getAdapterConfig().getSeedEntity());
}

}

@组件公共(public)类 IhubStrategyFactory {

@Autowired
ServiceGridConfiguration sfg;

@Autowired
ServiceGrid sg;

public IhubStrategy getIhubStrategy(String serviceDefinition) {

System.out.println("IhubStrategyFactory : "+sfg.getAdapterConfig().getSeedEntity());

//IhubStrategy策略= 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")) {

//策略 = new 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无法 Autowiring 。

@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());
}

}

关于java - Spring 启动: Load property file in constructor and use as autowire annotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61156653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com