Для чего используется аннотация @PostConstruct в Spring?

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

Ответ

@PostConstruct — это аннотация стандарта JSR-250 (не специфичная для Spring, но им поддерживаемая), которая помечает метод, выполняемый после инъекции зависимостей и перед использованием бина.

Назначение: Инициализация ресурсов, валидация конфигурации или выполнение стартовой логики после того, как все зависимости бина готовы.

Пример использования:

import javax.annotation.PostConstruct;

@Component
public class CacheService {
    private Map<String, Object> cache;

    @PostConstruct
    public void initCache() {
        // Метод вызовется после инъекции всех @Autowired полей
        this.cache = new ConcurrentHashMap<>();
        System.out.println("Cache initialized");
    }
}

Ключевые правила:

  • Метод должен быть void и не принимать параметров.
  • В классе может быть только один метод с @PostConstruct.
  • Выполняется после инъекции зависимостей (через @Autowired, конструктор или сеттеры).
  • Не работает для бинов с областью видимости prototype (только для singleton и других долгоживущих).
  • Если метод выбрасывает исключение, создание бина прерывается.