Ответ
В основе 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) и транзакции.