Какой принцип лежит в основе Spring Core?

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

Ответ

В основе Spring Core лежит Inversion of Control (IoC, Инверсия управления) и его реализация через Dependency Injection (DI, Внедрение зависимостей).

Суть: Контейнер IoC (ApplicationContext) берет на себя управление жизненным циклом объектов (бинов) и автоматически внедряет их зависимости, вместо того чтобы объекты создавали их самостоятельно.

Ключевые компоненты:

  • ApplicationContext — центральный интерфейс, расширенная версия BeanFactory. Управляет бинами, обеспечивает конфигурацию, события, AOP.
  • Bean Definitions — метаданные, описывающие бин (как его создать, его зависимости, scope).
  • Аннотации для конфигурации: @Component, @Service, @Autowired, @Configuration, @Bean.

Пример DI через конструктор (рекомендуемый способ):

@Service
public class UserService {
    private final UserRepository repository;
    // @Autowired не обязателен для единственного конструктора начиная с Spring 4.3
    public UserService(UserRepository repository) {
        this.repository = repository; // Зависимость внедрена контейнером
    }
}

Как это работает: Spring использует рефлексию для создания бинов и прокси-объекты (часто на основе CGLIB или JDK Dynamic Proxy) для обеспечения дополнительной функциональности, такой как AOP (Aspect-Oriented Programming) и транзакции.