Ответ
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).