У меня есть простое приложение, использующее @SpringBootAnnotation с одним вызовом по методу main :
SpringApplication.run(App.class, args);
В приложении. java Я также определяя пару @BeanS, которые дают экземпляр драйверов для доступа к внешним сервисам:
@Bean
public APEWebservice ape() {
return new APEWebservice(apeWebAddress + ":" + apePort);
}
Затем, на методе одного из моих @RestControllerS, я хочу сделать доступ к этим bean-компонентам, так что я могу делать дальнейшие вызовы к этим другим службам, что-то вроде этого:
@PostMapping(path="/talk", consumes = "application/json")
@ResponseStatus(HttpStatus.ACCEPTED)
public Talk talk(@RequestBody InputTalk body) throws ConfigurationException {
ApplicationContext context = new AnnotationConfigApplicationContext(App.class);
APEWebservice ape = context.getBean("ape", APEWebservice.class);
String DRSString = ape.getSoloOutput(input, OutputType.DRSXML);
((ConfigurableApplicationContext)context).close();
try {
Commanded transformed = Preprocessor.transform(body.getContent(), DRSString);
return new Talk(counter.incrementAndGet(), transformed.execute());
}
catch (WrongCommandException e) {
return new Talk(counter.incrementAndGet(), e.getError());
}
}
Это выглядит очень уродливо, и я уверен, что я полностью упускаю точку Spring и внедрение зависимостей. Есть ли способ получить доступ к контексту без необходимости инициализировать его для каждого вызова API?
Я использую SpringBoot 2.2.1