Spring IoC контейнер: настройка бинов, интерфейсы ApplicationContextAware и BeanNameAware
Когда ApplicationContext создает экземпляр объекта, который реализует интерфейс org.springframework.context.ApplicationContextAware, этому экземпляру предоставляется ссылка на этот ApplicationContext. Следующий листинг показывает определение интерфейса ApplicationContextAware:
Java
public interface ApplicationContextAware {
void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}
Kotlin
interface ApplicationContextAware {
@Throws(BeansException::class)
fun setApplicationContext(applicationContext: ApplicationContext)
}
Таким образом, bean-компоненты могут программно управлять созданным ими ApplicationContext через интерфейс ApplicationContext или путем приведения ссылки на известный подкласс этого интерфейса (такой как ConfigurableApplicationContext, который предоставляет дополнительные функциональные возможности). Одним из применений будет программный поиск других бинов. Иногда эта возможность полезна. Однако в целом этого следует избегать, поскольку он связывает код со Spring и не следует стилю инверсия контроля (Inversion of Control), где соавторы (collaborators) предоставляются компонентам в качестве свойств. Другие методы ApplicationContext обеспечивают доступ к файловым ресурсам, публикацию событий приложения и доступ к MessageSource.
Автопривязка (Autowiring) является еще одной альтернативой для получения ссылки на ApplicationContext. Традиционные конструктор и byType режимы автоматического подключения могут обеспечить зависимость типа ApplicationContext для аргумента конструктора или параметра метода установки, соответственно. Для большей гибкости, включая возможность автоматического подключения полей и методов с несколькими параметрами, используйте функции автоматического подключения на основе аннотаций. В этом случае ApplicationContext автоматически связывается с полем, аргументом конструктора или параметром метода, который ожидает тип ApplicationContext, если рассматриваемое поле, конструктор или метод содержит аннотацию @Autowired.
Когда ApplicationContext создает класс, который реализует интерфейс org.springframework.beans.factory.BeanNameAware, классу предоставляется ссылка на имя, определенное в определении его связанного объекта. В следующем листинге показано определение интерфейса BeanNameAware:
Java
public interface BeanNameAware {
void setBeanName(String name) throws BeansException;
}
Kotlin
interface BeanNameAware {
@Throws(BeansException::class)
fun setBeanName(name: String)
}
Обратный вызов вызывается после заполнения обычных свойств bean-компонента, но до обратного вызова инициализации, такого как InitializingBean, afterPropertiesSet или пользовательского метода init.
Читайте также:
- Spring IoC контейнер: настройка бинов, обратные вызовы при запуске и завершении работы
- Spring IoC контейнер: настройка бинов, методы инициализации и уничтожения по умолчанию
- Spring IoC контейнер: настройка бинов, объединение механизмов жизненного цикла
- Spring IoC контейнер: настройка бинов, обратные вызовы жизненного цикла
- Spring IoC контейнер: настройка бинов, обратные вызовы инициализации
- Spring IoC контейнер: настройка бинов, обратные вызовы разрушения
Комментарии
Отправить комментарий