scope: BeanFactory 除了拥有作为 IoC Service Provider 的职责,作为一个轻量级容器,它还有着其它的一些职责,其中就包括对象生命周期管理。bean 的生命周期,决定在于 scope 属性的设置。
singleton: 在 Spring 的 IoC 容器中,只存在一个共享实例,所有对象共享该对象的引用。这种对象的生命周期基本与 IoC 容器相同,就是从容器启动后,到第一次被请求后初始化该实例,一直存活到容器退出。所以说这种类型对象的"寿命"基本和 IoC 容器相同。
prototype: IoC 容器在接收到该类型对象的请求后,会每次都重新生成一个新的实例对象给请求方。也就是说,如果一个实例对象不能共享给所有对象的话,那就需要将该 bean 的 scope 声明为 prototype。
Spring 容器之 ApplicationContext
作为 Spring 提供的较之 BeanFactory 更为先进的 IoC 容器实现,ApplicationContext 除了拥有 BeanFactory 的所有功能外,还进一步扩展了基本容器的功能,包括 BeanFactoryPostProcessor、BeanPostProcessor 以及其他特殊类型 bean 的自动识别、容器启动后 bean 实例的自动初始化、国际化的信息支持、容器内时间发布等。
Spring 为 BeanFactory 类型容器提供了 XmlBeanFactory 实现。相应地,它也为 ApplicationContext 类型容器提供了一下几个常用实现。
FileSystemXmlApplicationContext
在默认情况下,从文件系统加载 bean 定义以及相关资源的 ApplicationContext 实现。
ClassPathXmlApplicationContext
在默认情况下,从 Classpath 加载 bean 定义以及相关资源的 ApplicationContext 实现。
Spring 提供的用于 Web 应用程序的 ApplicationContext 实现。