What's the difference between Spring BeanFactoryAware and ApplicationContextAware?

java, spring

Solution

If you need a reference to the `BeanFactory`, then use `BeanFactoryAware`. If you need a reference to the `ApplicationContext`, then use `ApplicationContextAware`.

Note that the `ApplicationContext` interface is a subclass of `BeanFactory`, and provides additional methods on top of the basic `BeanFactory` interface.

If all you need to do is call `getBean()`, then `BeanFactory` is sufficient.

Note also that Spring 2.5+ provides a nicer way of getting yourself wired with a `BeanFactory` or `ApplicationContext`, e.g.

private @Autowired ApplicationContext appContext;
private @Autowired BeanFactory beanFactory;

No need for the `XyzAware` interfaces.

Problem

Both can be used to get bean instance, but which one is better to be used to implement?

Original source