两者都可用于获取bean实例,但哪一个更适合用于实现?
答案 0 :(得分:29)
如果您需要BeanFactory
的引用,请使用BeanFactoryAware
。如果您需要ApplicationContext
的引用,请使用ApplicationContextAware
。
请注意,ApplicationContext
接口是BeanFactory
的子类,并在基本BeanFactory
接口之上提供其他方法。
如果你需要做的只是致电getBean()
,那么BeanFactory
就足够了。
另请注意,Spring 2.5+提供了一种更好的方式来使用BeanFactory
或ApplicationContext
连接自己,例如
private @Autowired ApplicationContext appContext;
private @Autowired BeanFactory beanFactory;
不需要XyzAware
接口。
答案 1 :(得分:4)
ApplicationContext
是BeanFactory
的扩展版本,因此提供了其他功能。
因此,是否使用ApplicationContextAware
或BeanFactoryAware
归结为以下问题:您是否明确需要任何其他ApplicationContext
功能?如果您实施ApplicationContextAware
,则坚持BeanFactoryAware
。
答案 2 :(得分:2)
您是否需要访问ApplicationContext上提供的其他功能?如果是这样,那么你当然应该使用 ApplicationContextAware 。如果没有, BeanFactoryAware 就足够了。
在许多其他事情中,ApplicationContext还有其他检查bean的方法,例如 containsBeanDefinition , getBeanDefinitionCount , getBeanDefinitionNames , getBeanNamesForType , getBeansOfType 可能对您有用哪些在 BeanFactory
上不可用我通常实现ApplicationContextAware