spring 容器
在基于spring的应用中,应用的对象生存于spring 容器中,容器负责创建和装配对象, 配置他们并且管理他们的整个声明周期。容器是spring 框架的核心,spring容器使用DI (依赖注入)管理构成应用的组建,他会创建相互协作的组建之间的关联
spring 容器可以分为两种不同的类型 bean工厂,以及应用上下文。 其中 bean工厂是最简单的容器,提供基本的DI 支持,而应用上下文则是基于beanFactory 构建,并提供应用框架级别的服务
spring 应用上下文
spring 自带多种类型的应用上下文
- annotationConfigApplicationContext :从一个或多个基于Java的配置类中加载spring应用上下文
- annotationConfigWebApplicationContext :从一个或多个基于Java 的配置类中价值spring
web 应用上下文 - ClassPathXmlApplicationContext 从类路径下的一个或多个xml
配置文件中加载上下文定义,把应用上下文的定义文件作为类资源 - FileSystemXmlApplicationContext 从文件系统的xml 配置文件中加载上下文定义
- XmlWebApplicationContext 从web 应用下的xml 配置文件中加载上下文定义
当应用上下文准备就绪后,我们可以调用上下文的getBaen()方法从容器中获取bean
Spring Bean 的生命周期
传统Java应用中,bean 的声明周期很简单,使用new 关键字进行bean 的实例化,然后就可以使用bean了。当不使用了,则由Java的垃圾回收机制回收 ,而spring的bean 有属于自己的过程
- spring 对bean 进行实例化
- spring 将值和bean 的引用注入到bean 对于的属性中
- 如果bean 实现了 BeanNameAware 接口,则将bean 的id 传递给setBeanName 方法
- 如果实现了BeanFactoryAware 接口 ,调用setBeanFactory 方法,将beanFactory 容器实力传入
- 如果实现了ApplicationContextAware 接口, 将调用setApplicationContext 方法,将 bean
所在的应用上下文引用传入进来 - 如果bean 实现了 beanPostProcessor 接口
- 如果实现了 InitializingBean
- beanPostProcessor
- 经过上面的准备,bean 已经准备就绪了,可以被应用程序使用,他们会一直驻留在应用上下文中,知道应用上下文被销毁
- 如果bean 实现了DisposableBean 接口,spring将调用它的destroy 方法