Как я могу запустить некоторый код внутри контейнера Spring после загрузки всех компонентов? Я знаю, что могу использовать @PostConstruct для одного bean-компонента, но я хотел бы запустить этот фрагмент кода после вызова всех PostConstruct. Возможно ли?
---ОБНОВЛЕНИЕ---
Я пытался следовать пути ApplicationListener, это реализация:
@Component
public class PostContructListener implements ApplicationListener<ContextRefreshedEvent> {
private static Logger log = LoggerFactory.getLogger(PostContructListener.class);
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
Collection<Initializable> inits= contextRefreshedEvent.getApplicationContext().getBeansOfType(Initializable.class).values();
for (Initializable initializable : inits) {
try{
log.debug("Initialization {} ",initializable.getClass().getSimpleName());
initializable.init();
}catch(Exception e){
log.error("Error initializing {} ",initializable.getClass().getSimpleName(),e);
}
}
}
}
Применив интерфейс "Инициализируемый" ко всем сервисам, я получил то, что мне было нужно, как каждый раз я ломал все автопровода, не могу понять почему, но вроде как подключен к новому интерфейсу "Инициализируемый":
java.lang.IllegalArgumentException: Can not set com.service.MyService field com.controller.RestMultiController.myService to com.sun.proxy.$Proxy41