什么是Bean

交由Spring 容器管理(负责创建,装配,注入)的Java对象。

什么是Spring容器

Spring容器负责实例化,配置和装配Spring Bean。

BeanFactory 和 ApplicationContext区别

相同点

(1)BeanFactory和ApplicationContext都是从容器中获取Spring Bean的。

不同点

(1)BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。
(2)ApplicationContext接口,是由BeanFactory接口派生而来,因而提供BeanFactory的所有功能。
(3)BeanFactory使用延迟加载的策略加载Bean实例,即只有在使用了某个Bean(调用getBean()),才对该Bean进行加载实例化,所以在容器启动后,是无法发现Spring的配置问题的。ApplicationContext则相反,它是在容器启动时,就一次性创建了所有的Bean。这样,在容器启动时,就可以发现Spring中存在的配置错误。
(4)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,区别是BeanFactory需要手动注册,而ApplicationContext则是自动注册。

ApplicationContext包含了BeanFactory所有特性。通常推荐使用前者。但是也有一些限制情形,比如移动应用内存消耗比较严苛,在那些场景下,使用更轻量级的BeanFactory更合理。但在大多数企业级应用中,ApplicationContext是首选。