Рубрики
Без рубрики

Интерфейсы BeanNameAware и BeanFactoryAware весной

Посмотрите на работу с интерфейсами BeanNameAware и BeanFactoryAware весной.

Автор оригинала: baeldung.

1. Обзор

В этом быстром учебнике, мы сосредоточимся на BeanNameAware и BeanFactoryAware интерфейсы, в весенней рамочной .

Мы опишем каждый интерфейс отдельно с плюсами и минусами их использования.

2. Осозная интерфейс

Оба BeanNameAware и BeanFactoryAware принадлежат к org.springframework.beans.factory.Aware интерфейс корневого маркера. При этом используется инъекция сеттера для запуска объекта во время запуска контекста приложения.

Осознавая интерфейс – это сочетание шаблонов обратного вызова, слушателя и . Это означает, что фасоль имеет право быть уведомленным контейнером Spring с помощью методов обратного вызова.

3. BeanNameAware

BeanNameAware делает объект осведомлен о названии фасоли, определяемом в контейнере .

Рассмотрим пример:

public class MyBeanName implements BeanNameAware {

    @Override
    public void setBeanName(String beanName) {
        System.out.println(beanName);
    }
}

beanName свойство представляет идентификатор фасоли, зарегистрированный в контейнере Spring. В нашей реализации мы просто отображаем имя фасоли.

Далее давайте зарегистрируем фасоль этого типа в классе конфигурации Spring:

@Configuration
public class Config {

    @Bean(name = "myCustomBeanName")
    public MyBeanName getMyBeanName() {
        return new MyBeanName();
    }
}

Здесь мы прямо присвоили имя нашему MyBeanИмя класс с @Bean (название и “MyCustomBeanName”) линия.

Теперь мы можем начать контекст приложения и получить фасоль от него:

AnnotationConfigApplicationContext context 
  = new AnnotationConfigApplicationContext(Config.class);

MyBeanName myBeanName = context.getBean(MyBeanName.class);

Как и мы ожидаем, setBeanName метод распечатывает “myCustomBeanName” .

Если мы удалим имя код из @Bean аннотация контейнера, в этом случае, присваивает getMyBeanName () имя метода в фасоли. Таким образом, выход будет “getMyBeanName” .

4. BeanFactoryAware

BeanFactoryAware используется для введения BeanFactory объект . Таким образом, мы получим доступ к BeanFactory который создал объект.

Вот пример одного из MyBeanFactory класс:

public class MyBeanFactory implements BeanFactoryAware {

    private BeanFactory beanFactory;

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }

    public void getMyBeanName() {
        MyBeanName myBeanName = beanFactory.getBean(MyBeanName.class);
        System.out.println(beanFactory.isSingleton("myCustomBeanName"));
    }
}

С помощью setBeanFactory () метод, мы назначаем BeanFactory ссылка из контейнера IoC на beanFactory собственности .

После этого, мы можем использовать его непосредственно как в getMyBeanName () функция.

Давайте инициализируем MyBeanFactory и позвоните getMyBeanName () метод:

MyBeanFactory myBeanFactory = context.getBean(MyBeanFactory.class);
myBeanFactory.getMyBeanName();

Как мы уже мгновенно MyBeanИмя класс в предыдущем примере Spring вызовет существующий экземпляр здесь.

beanFactory.isSingleton (“myCustomBeanName”) линия проверяет это.

5. Когда использовать?

Типичный случай использования для BeanNameAware может быть приобретение названия фасоли для лесозаготовок или проводки целей. Для BeanFactoryAware это может быть возможность использовать пружинный боб из устаревшего кода.

В большинстве случаев, мы должны избегать использования любого из Осознавая интерфейсы, если они нам не нужны. Реализация этих интерфейсов позволит укооедать код с рамками Spring.

6. Заключение

В этой записи мы узнали о BeanNameAware и BeanFactoryAware интерфейсы и как их использовать на практике.

Как обычно, полный код для этой статьи доступен более на GitHub .