一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
spring是什么?
是个框架,是个容器,是个生态
为什么要用spring?
简化了开发难度,不需要创建对象,只需要在使用时拿出来即可,spring负责了创建bean对象
最开始的注入bean对象是通过xml文件进行bean对象的注入,现在更方便的是使用注解,而容器必须识别bean信息才能进行创建,所以不管是xml文件还是@controller注解都是用来定义bean的信息
在启动的时候会加载跟解析xml文件跟注解类,加载和解析完成后会把bean对象放到容器里的一个对象里面叫BeanDefinition,它包含了很多bean的定义信息
而xml怎么变成BeanDefinition
xml本质上就是一个特殊格式的文件,通过io流获取后通过document解析,循环获取document的父子节点数据set到具体配置的属性中。
但是不同格式的文件有不同格式的解析方式,spring不能出现一种格式写一种解析方式,所以需要一个规范
而BeanDefinitionReader类就是提供了一个可以随意重写解析的方法
在上面我们得到了BeanDefinition对象,但是它不是bean对象,我们不能直接使用,但是它都有了bean的定义信息所以我们可以直接创建对应的bean对象就好了
如果对bean的方法里的value是需要替换的就需要进行扩展处理
postProcesson就是各项扩展点,像上面处理占位符修改bean内容定义的就可以通过下面的BeanFactoryPostProcesson接口的PlaceholderConfigureSupport实现类进行占位符解析替换
而BeanFactoryPostProcessor也是作用在BeanDefinition上进行修改的
可以通过postProcessor个性化设置bean处理逻辑
bean对象是什么时候被调用的
创建对象有几个步骤
bean的生命周期
1. 实例化
- 初始化
beanFactory跟Factorybean的区别
接口跟抽象类的区别
源码里面是怎么实现的扩展
BeanFactory的理解
BeanFactory是进行整个容器的访问的
反射获取对象
AOP跟IOC的关系
源码方法论