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