BeanNameAware и BeanFactoryAware

Какая польза от BeanNameAware и BeanFactoryAware? Я изучал spring и наткнулся на эти два интерфейса. Я googled они но ничего полезного пришло вверх. Скажите, пожалуйста, какова функциональность интерфейсов BeanNameAware и BeanFactoryAware и когда их использовать?

Ответы

Ответ 1

Интерфейс xxxAware - это общий шаблон, используемый в рамках Spring. Они обычно используются для предоставления bean bean (объекту ) объекта Spring

Документация Springs говорит об интерфейсе Aware, который является супер-интерфейсом для двух, о которых вы упоминаете:

Поверхностный указатель маркера, указывающий, что bean может быть уведомлен контейнером Spring конкретного объекта рамки через метод обратного вызова.

Как указывает Sotirious, интерфейс Aware имеет представление о шаблонах слушателя, обратного вызова или шаблона наблюдения.

Использование будет выглядеть так:

@Component
public MyBean implements BeanFactoryAware {
    private BeanFactory beanFactory;

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

    public void myMethod() {
        //I can now use beanFactory here
    }
}

Во время начальной загрузки Spring проверит каждый bean, чтобы определить, реализует ли он какой-либо из интерфейсов xxxAware. Когда он найден, он вызывает метод интерфейса, предоставляя запрашиваемую часть информации. В приведенном выше примере Spring вызывает MyBean#setBeanFactory, предоставляя его BeanFactory.

Конечно, во многих ситуациях не обязательно использовать эти интерфейсы. Например, интерфейс ApplicationContextAware можно обойти, просто @Autowired ing ApplicationContext в bean.

@Component
public class MyOtherBean {
    @Autowired
    private ApplicationContext applicationContext;

    public void someMethod() {
        //I can use the ApplicationContext here.
    }
}

Ответ 2

BeanNameAware информирует объект о его bean имени. Он лучше всего используется в предварительной аннотации конфигурации spring (2.x). Тогда вы можете ссылаться на bean на локатор по его имени.
BeanFactoryAware предоставляет bean доступ к beanfactory, который его создал. Для полезности этого вы должны проверить документацию: http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/beans/factory/BeanFactoryAware.html

Ответ 3

Интерфейс BeanFactoryAware используется во время инициализации ApplicationContext. Он использовался в Spring 2 для настройки плетения beans, прежде чем они будут инициализированы. Примером может служить добавление pointcuts во время загрузки (LTW), например. для автогенерированных методов поиска DAO. Другое использование может состоять в том, чтобы загрузить минимизированный контекст для теста, ускорить тесты (ленивая инициализация была бы лучшей практикой)

См. также http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-beanfactory для справки.