Сколько раз вызывается метод @PostConstruct в Spring?

«Сколько раз вызывается метод @PostConstruct в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод, аннотированный @PostConstruct, вызывается ровно один раз за время жизни бина Spring.

Когда это происходит:

  1. После создания экземпляра бина.
  2. После внедрения всех зависимостей (инъекции через @Autowired или конструктор).
  3. До того, как бин будет готов к использованию (например, до обработки бизнес-запросов).

Пример:

@Component
public class DatabaseInitializer {
    @Autowired
    private DataSource dataSource;

    @PostConstruct
    public void init() {
        // Зависимость dataSource уже инжектирована
        System.out.println("Инициализация данных...");
        // Логика инициализации
    }
}

Важные ограничения:

  • Метод должен быть void и не принимать параметров.
  • Вызов гарантируется только при управлении бином через контейнер Spring (или другой DI-фреймворк, поддерживающий JSR-250). Если бин создан через new, аннотация игнорируется.
  • В случае prototype-бинов метод @PostConstruct также вызывается один раз для каждого созданного экземпляра.