Ответ
Метод, аннотированный @PostConstruct, вызывается ровно один раз за время жизни бина Spring.
Когда это происходит:
- После создания экземпляра бина.
- После внедрения всех зависимостей (инъекции через
@Autowiredили конструктор). - До того, как бин будет готов к использованию (например, до обработки бизнес-запросов).
Пример:
@Component
public class DatabaseInitializer {
@Autowired
private DataSource dataSource;
@PostConstruct
public void init() {
// Зависимость dataSource уже инжектирована
System.out.println("Инициализация данных...");
// Логика инициализации
}
}
Важные ограничения:
- Метод должен быть
voidи не принимать параметров. - Вызов гарантируется только при управлении бином через контейнер Spring (или другой DI-фреймворк, поддерживающий JSR-250). Если бин создан через
new, аннотация игнорируется. - В случае
prototype-бинов метод@PostConstructтакже вызывается один раз для каждого созданного экземпляра.