Ответ
Да, можно. Spring гарантирует, что все зависимости бина (инжектированные через @Autowired, @Inject и т.д.) будут внедрены до вызова метода с аннотацией @PostConstruct. Это делает вызов методов других бинов безопасным.
Почему это работает: Жизненный цикл бина включает инъекцию зависимостей, затем выполнение методов @PostConstruct. Поэтому к моменту вызова init() все поля, такие как serviceB, уже проинициализированы.
Пример:
@Service
public class ServiceA {
@Autowired
private ServiceB serviceB;
@PostConstruct
public void init() {
// ServiceB уже готов к использованию
serviceB.doSomething();
}
}
@Service
public class ServiceB {
public void doSomething() {
System.out.println("ServiceB works!");
}
}
Важное замечание: Следите за циклическими зависимостями. Если ServiceB также зависит от ServiceA и имеет свой @PostConstruct, это может привести к исключению во время создания контекста.