Как называется процесс получения доступа к бину из контекста
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Получение доступа к бину из контекста Spring
Процесс получения доступа к бину из контекста Spring ApplicationContext называется Bean Lookup или Dependency Injection (DI).
Основные термины:
1. Bean Lookup
Это процесс поиска и получения бина из контекста приложения. Осуществляется несколькими способами:
// Способ 1: Через ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
MyService service = (MyService) context.getBean("myService");
MyService service2 = context.getBean(MyService.class);
// Способ 2: Через BeanFactory
BeanFactory factory = new ClassPathXmlApplicationContext("config.xml");
MyService service = factory.getBean(MyService.class);
2. Dependency Injection (DI)
Это паттерн внедрения зависимостей — процесс автоматического получения необходимых бинов и передачи их в другие бины. Spring сам управляет этим процессом.
@Service
public class OrderService {
private final PaymentService paymentService;
// Constructor Injection
public OrderService(PaymentService paymentService) {
this.paymentService = paymentService;
}
}
Методы получения бинов:
- Constructor Injection — через конструктор (рекомендуется)
- Setter Injection — через setter методы
- Field Injection — через аннотацию @Autowired на поле (не рекомендуется)
- Method Injection — через произвольные методы
Порядок разрешения зависимостей:
Когда Spring создаёт бин, он выполняет следующие шаги:
- Bean Definition Loading — загрузка определений бинов из конфига
- Bean Instantiation — создание объекта бина
- Dependency Resolution — поиск необходимых зависимостей
- Dependency Injection — передача зависимостей в бин
- Initialization — вызов методов инициализации (@PostConstruct)
BeanFactory vs ApplicationContext
Оба используются для получения бинов, но ApplicationContext имеет больше функциональности: поддержку event publishing, интеграцию с i18n, разрешение property placeholders.
Практический пример:
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource();
}
@Bean
public UserRepository userRepository(DataSource dataSource) {
return new UserRepository(dataSource);
}
}
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserRepository repo = context.getBean(UserRepository.class); // Bean Lookup
}
}
Выводы: процесс называется Bean Lookup и основан на паттерне Dependency Injection. Spring IoC контейнер автоматически управляет жизненным циклом бинов и разрешением их зависимостей.