SpringMVC启动流程——Bean的初始化
SpringMVC启动流程——Bean的初始化
1. 定义Bean的方式
可以通过三种不同的方式定义Spring bean:
- 使用构造型@Component注释(或其衍生物)注释类
- 编写在自定义Java配置类中使用@Bean注释的bean工厂方法
- 在XML配置文件中声明bean定义
2. Bean的作用域
3. Bean的生命周期
网上的图
-
Spring对bean进行实例化,调用bean的构造参数
-
设置对象属性,调用bean的set方法,将属性注入到bean的属性中
-
检查bean是否实现BeanNameAware、BeanFactoryAware、ApplicationContextAware接口,如果实现了这几个接口Spring会分别调用其中实现的方法。
BeanNameAware:setBeanName(String name)方法,参数是bean的ID
BeanFactoryAware:setBeanFactory(BeanFactory bf)方法,参数是BeanFactory容器
ApplicationContextAware:setApplicationContext(ApplicationContext context)方法,参数是bean所在的引用的上下文,如果是用Bean工厂创建bean,那就可以忽略ApplicationContextAware。 -
如果bean是否实现BeanPostProcessor接口,Spring会在初始化方法的前后分别调用postProcessBeforeInitialization和postProcessAfterInitialization方法
-
如果bean是否实现InitalizingBean接口,将调用afterPropertiesSet()方法
-
如果bean声明初始化方法,也会被调用
-
使用bean,bean将会一直保留在应用的上下文中,直到该应用上下文被销毁。
-
检查bean是否实现DisposableBean接口,Spring会调用它们的destory方法
-
如果bean声明销毁方法,该方法也会被调用
3. Bean的初始化
Spring bean的加载主要分为以下6步:
(1)读取XML配置文件
(2)XML文件解析为document文档
(3)解析bean
(4)注册bean
(5)实例化bean
(6)获取bean