Spring: IoC/DI и жизненный цикл бина
Разбери, как Spring создаёт объекты приложения, связывает их зависимости и управляет временем их жизни. Вопросы охватывают контейнер Spring, способы внедрения зависимостей, области действия бинов, инициализацию и прокси.
Вопросы
- Что такое инверсия контроля (IoC) и внедрение зависимостей (DI)? Как эти принципы реализованы в Spring?
- Что такое IoC контейнер?
- Расскажите про аннотацию @Bean?
- Расскажите про аннотацию @Component?
- Чем отличаются аннотации @Bean и @Component?
- Расскажите про аннотации @Service и @Repository. Чем они отличаются?
- Расскажите про аннотацию @Autowired
- Расскажите про аннотацию @Resource
- Расскажите про аннотацию @Inject
- Расскажите про аннотацию @Lookup
- Можно ли вставить бин в статическое поле? Почему?
- Расскажите про аннотации @Primary и @Qualifier
- Как внедрить (заинжектить) примитив?
- Как внедрить (заинжектить) коллекцию?
- Расскажите про аннотацию @Conditional
- Расскажите про аннотацию @Profile
- Расскажите про ApplicationContext и BeanFactory, чем отличаются? В каких случаях что стоит использовать?
- Расскажите про жизненный цикл бина, аннотации @PostConstruct и @PreDestroy()
- Какие скоупы бинов бывают? Какой скоуп используется по умолчанию?
- Расскажите про аннотацию @ComponentScan
- Как Spring создаёт прокси: JDK Dynamic Proxy vs CGLIB
- BeanPostProcessor и BeanFactoryPostProcessor — в чём разница?
- Циклические зависимости: как Spring их разрешает?
- Constructor vs field vs setter injection: что выбрать?
- Как внедрить prototype-бин в singleton?