Вопрос проверяет понимание принципов IoC и того, как объекты попадают под управление Spring-контейнера.
Объект становится управляемым Spring, если он зарегистрирован как бин в контексте приложения. Это можно сделать с помощью аннотаций, конфигурационных классов или XML. После регистрации Spring сам создаёт объект, управляет его жизненным циклом и внедряет зависимости. Такой объект называется Spring-бином. Без регистрации объект остаётся обычным Java-объектом.
Spring-бин — это объект, который:
создаётся Spring-контейнером
управляется им на протяжении жизненного цикла
может участвовать во внедрении зависимостей
Spring предоставляет несколько вариантов, и выбор зависит от стиля конфигурации.
Самый распространённый способ.
@Component
class UserService {
}
Также используются специализированные аннотации:
@Service
@Repository
@Controller
Они семантически различаются, но технически эквивалентны @Component.
@ConfigurationБин можно объявить явно:
@Configuration
class AppConfig {
@Bean
UserService userService() {
return new UserService();
}
}
Чтобы объект стал бином:
он должен быть зарегистрирован в контексте
его создание не должно происходить через new вне Spring
Объект становится управляемым Spring только тогда, когда его жизненным циклом управляет контейнер. Для этого его нужно явно зарегистрировать как бин.