Какая разница между Spring BeanFactoryAware и ApplicationContextAware?

Оба могут использоваться для получения экземпляра bean, но какой из них лучше использовать для реализации?

Ответ 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