Bootstrap

spring Bean容器简介

spring应用中,应用对象生存与容器(container)中,spring负责创建对象并装配它们,配置它们并管理它们的整个生命周期,从生存到死亡——new到finalize()

spring容器可归为两类

  • bean工厂(org.springframework.beans.factory.BeanFactory) 提供简单DI支持

  • 应用上下文(org.springframework.context.ApplicationContext)基于BeanFactory构建,并提供框架服务,如配置解析

主流使用的是功能更加强大的应用上下文(ApplicationContext)

五种最常见的应用上下文加载:

AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载spring应用上下文

AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文

ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载应用上下文

FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文

XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义

直白一点,就是五种常见加载方式  Application context = new 某种Context(参数传资源位置) 如"a.b.c.class" / "F:/config.xml" / "config.xml"  等等

bean的生命周期

在传统Java中  bean的生命周期就是 new() ,当不再使用时,由gc自动进行垃圾回收

相比spring容器 bean的生命周期会复杂许多,理解bean生命周期非常重要,你可能需要利用spring提供的扩展接口自定义bean的创建过程

bean装载到spring应用上下文的生命周期过程如下:

实例化---->填充属性---->调用BeanNameAware setBeanName()---->调用BeanFactoryAware setBeanFactory()---->调用ApplicationContextAware setApplicationContext()---->调用BeanPostProcessor的预初始化方法---->调用InitializingBean的afterPropertiesSet()方法---->调用自定义的初始化方法---->调用BeanPostProcessor的初始化后方法

至此bean已经可以使用

当容器关闭 ——>调用DisposableBean的destroy()方法——>调用自定义销毁方法——>bean销毁

1.Spring首先对bean进行实例化、

2.Spring将值和bean的引用注入到bean对应的属性当中

3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()

4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFacotry容器实例传入

5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来

6.如果bean实现了BeanPostProcessor接口,Spring将调用他们的postProcessBeforeInitialization()

7.如果bean实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法

8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessAfterInitialization()

9.Bean准备就绪,驻留在spring应用上下文

10.如果bean实现了DisposableBean接口,Spring将调用它的destroy()方法,同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用

 

;