Какие метаданные конфигурации принимает Spring-контейнер для создания бина?

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

Ответ

Spring IoC-контейнер принимает метаданные конфигурации, которые определяют, как создавать и настраивать бины. Существует три основных способа предоставления этих метаданных:

1. Аннотации (наиболее распространенный) Используются аннотации, такие как @Component, @Service, @Repository, @Controller.

@Component
@Scope("prototype")
public class MyService {
    @Autowired
    private MyRepository repository;

    @PostConstruct
    public void init() { /* логика инициализации */ }
}

2. Java-конфигурация (через @Configuration) Бины объявляются в классах, помеченных @Configuration, с помощью методов, аннотированных @Bean.

@Configuration
public class AppConfig {
    @Bean
    @Scope("prototype")
    public MyService myService() {
        return new MyService();
    }
}

3. XML-конфигурация (устаревший способ) Бины описываются в XML-файлах с использованием элемента <bean>.

Основные метаданные бина включают:

  • Идентификатор/Имя: Уникальное имя бина (например, bean id или имя метода @Bean).
  • Класс: Полное имя класса, экземпляр которого нужно создать.
  • Scope: Область видимости бина (singleton, prototype, request, session, application).
  • Зависимости (Dependencies): Ссылки на другие бины, которые внедряются через конструктор, сеттеры или поля (@Autowired, <constructor-arg>, <property>).
  • Значения свойств: Литеральные значения для примитивов или строк (@Value, <property>).
  • Методы жизненного цикла: Методы инициализации (@PostConstruct, init-method) и уничтожения (@PreDestroy, destroy-method).