Оба могут использоваться для получения экземпляра bean, но какой из них лучше использовать для реализации?
Какая разница между Spring BeanFactoryAware и ApplicationContextAware?
Ответ 1
Если вам нужна ссылка на BeanFactory
, используйте BeanFactoryAware
. Если вам нужна ссылка на ApplicationContext
, используйте ApplicationContextAware
.
Обратите внимание, что интерфейс ApplicationContext
является подклассом BeanFactory
и предоставляет дополнительные методы поверх базового интерфейса BeanFactory
.
Если вам нужно всего лишь позвонить getBean()
, то BeanFactory
достаточно.
Обратите внимание также, что Spring 2.5+ обеспечивает более удобный способ подключения к проводной сети с помощью BeanFactory
или ApplicationContext
, например
private @Autowired ApplicationContext appContext;
private @Autowired BeanFactory beanFactory;
Нет необходимости в интерфейсах XyzAware
.
Ответ 2
An ApplicationContext
является расширенной версией BeanFactory
и поэтому предлагает дополнительные функции.
Значит ли использование ApplicationContextAware
или BeanFactoryAware
сводится к вопросу: вам явно нужны какие-либо дополнительные функции ApplicationContext
? Если вы выполняете ApplicationContextAware
иначе придерживаетесь BeanFactoryAware
.
Ответ 3
Вам нужен доступ к дополнительным функциям, доступным в ApplicationContext? Если это так, то вам следует, конечно, использовать ApplicationContextAware. Если нет, BeanFactoryAware будет достаточно.
Среди многих других вещей ApplicationContext имеет дополнительные методы для проверки beans например. содержитBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForType, getBeansOfType, которые могут быть вам полезны и которые недоступны в BeanFactory
Я обычно реализую ApplicationContextAware