2025.02.23笔记 ~ langhai

2025.02.23笔记
Spring IOC 的理解 实现?
控制反转:原来的对象是由使用者来进行控制的,有了spring之后,可以把整个对象交给spring来帮我们进行管理。
DI:依赖注入,把对应的属性的值 注入到具体的对象中,@Autowired完成属值性的注入。
容器:存储对象,使用map结构来存储对象,在spring中存在三级缓存,singletonObjects存放的是完整的bean对象。整个Bean的生命周期,从创建到使用到销毁的过程全部都是由容器来管理。
容器的创建过程
BeanFactory DefaultListableBeanFactory 向bean工厂中设置一些参数 BeanPostProcessor Aware接口的子类 等等属性
加载解析bean对象 准备要创建的bean对象的定义对象 beanDefinition (xml或者注解的解析过程)
beanFactoryPostProcessor的处理,此处是扩展点,PlaceHolderConfigurerSupport、ConfigurationClassPostProcessor
BeanPostProcessor的注册功能,方便后续对bean对象完成具体的扩展功能
通过反射的方式将BeanDefinition对象实例化成具体的bean对象
bean对象的初始化过程 (填充属性 调用aware子类的方法 调用BeanPostProcessor的前置处理方法 调用init-method方法 调用 BeanPostProcessor的后置处理方法)
生成完整的bean对象,通过getBean方法可以直接获取
销毁过程
spring ioc 底层 反射 工厂 设计模式
关键的几个方法 createBeanFactory getBean doGetBean createBean doCreateBean ... ...
- 先通过createBeanFactory创建出一个Bean工厂 DefaultListableBeanFactory
- 开始循环创建对象,因为容器中的bean默认是单例的,所以优先通过getBean,doGetBean从容器中查找
- 找不到的话 通过createBean doCreateBean方法,以反射的方式创建对象 一般情况下使用的是无参的构造方法 getDeclaredConstructor newInstance
- 进行对象的属性填充 populateBean
- 进行其他的初始化操作 initializingBean