← Все навыки

Java. Spring

Устройство Spring Framework «под капотом»: IoC-контейнер, управление бинами, Dependency Injection и AOP — осознанно конфигурировать контейнер, а не просто навешивать аннотации

Spring Core (6.x) IoC / DI / AOP Индивидуально с ментором

Для кого этот навык

  • Java-разработчики, которые используют Spring, но не понимают, что происходит внутри контейнера
  • Backend-инженеры, готовящиеся к секции Spring на собеседовании Middle / Senior
  • Все, кто хочет уверенно отвечать на вопросы про жизненный цикл бинов, прокси и AOP

Программа

IoC-контейнер и определения бинов

IoC/DI, BeanDefinition, BeanFactory vs ApplicationContext
  • Inversion of Control и Dependency Injection, отличие от Service Locator
  • bean, BeanDefinition, BeanFactory vs ApplicationContext, refresh()
  • Три источника метаданных: XML, стереотипы, Java-config (@Configuration/@Bean)
  • @ComponentScan, @Import, @Enable-аннотации, CGLIB-проксирование (lite/full)

Dependency Injection

Формы инъекции, @Qualifier/@Primary, циклические зависимости
  • Инъекция через конструктор, сеттер, поле; @Autowired
  • Разрешение неоднозначности: @Primary, @Qualifier, @Priority
  • Инъекция коллекций, ObjectProvider, @Lazy
  • Циклические зависимости и трёхуровневый кэш singleton'ов

Жизненный цикл и scope бинов

BeanPostProcessor, @PostConstruct, scope'ы, потокобезопасность
  • Полный жизненный цикл бина, Aware-интерфейсы, BeanPostProcessor
  • @PostConstruct / @PreDestroy и их ловушки
  • Scope'ы: singleton, prototype, web; потокобезопасность singleton'ов
  • Внедрение prototype в singleton: ObjectProvider, @Lookup, scoped proxy

Точки расширения и конфигурация

BeanFactoryPostProcessor, Environment, @Profile, SpEL
  • BeanFactoryPostProcessor, BeanDefinitionRegistryPostProcessor и порядок выполнения
  • Environment, @PropertySource, @Value
  • Условная сборка бинов: @Profile, @Conditional
  • Resource/ResourceLoader, ConversionService, SpEL

AOP, события и инфраструктура

AOP, @EventListener, валидация, @Async/@Scheduled
  • AOP: прокси JDK vs CGLIB, @Aspect, advice, pointcut, проблема self-invocation
  • События контейнера: @EventListener, @TransactionalEventListener
  • Jakarta Validation, MessageSource (локализация)
  • @Async и @Scheduled; внутреннее устройство сборки контекста

Практика

Разбираете контейнер на практике и проходите код-ревью с ментором

  • Мини-IoC-контейнер на рефлексии — понять границы работы Spring
  • Конфигурирование бинов всеми способами, выбор @Component vs @Bean
  • Диагностика и устранение циклических зависимостей
  • Собственные BeanFactoryPostProcessor / BeanPostProcessor (генерация бинов по аннотации)
  • Условная сборка через @Profile и кастомные @Conditional, вычисление SpEL
  • Аспекты через @Aspect, решение проблемы self-invocation
  • Декаплинг через события, декларативная асинхронность (@Async, @Scheduled)