目录
一、bean生命周期的原理
1.1 了解bean的生命周期
首先我们就要思考一个问题,那就是:
Spring是管理项目中所有的javabean对象;
那这些bean对象又是什么时候生?什么时候提供服务?什么时候销毁?
我们可以一起来看看这张bean的生命周期图: 运行逻辑是从下往上根据箭头来看的;
我们一起来分析一下:
第一步:
通过XML、Java annotation(注解)以及Java Configuration(配置类)
等方式加载Spring Bean;
第二步:
<BeanDefinitionReader>:解析Bean的定义。
在Spring容器启动过程中,会将Bean解析成Spring内部的BeanDefinition结构;
理解为:将spring.xml中的<bean>标签转换成BeanDefinition结构
有点类似于XML解析;
第三步:
BeanDefinition:包含了很多属性和方法。
例如:id、class(类名)、scope、ref(依赖的bean)等等。
其实就是:
将bean(例如<bean>)的定义信息存储到这个对应BeanDefinition相应的属性中;
例如:
<bean id="" class="" scope=""> -----> BeanDefinition(id/class/scope)
第四步:
BeanFactoryPostProcessor:是Spring容器功能的扩展接口。
注释:
1)BeanFactoryPostProcessor在spring容器加载完BeanDefinition之后,
在bean实例化之前执行的;
2)对bean元数据(BeanDefinition)进行加工处理,
也就是BeanDefinition属性填充、修改等操作。
结论1:
当我们运行这行代码时:
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("/spring-context.xml");
会对Spring的配置文件进行建模,