2025.02.23笔记 ~ langhai

林书豪
2025-02-23 19:49:25
2025.02.23笔记 浪海值:170度
文章标签:java基础面试题
文章摘要:2025.02.23笔记
使用新的显示器:新的显示器 如果遇到图片单击即可放大/缩小。

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 ... ...

  1. 先通过createBeanFactory创建出一个Bean工厂 DefaultListableBeanFactory
  2. 开始循环创建对象,因为容器中的bean默认是单例的,所以优先通过getBean,doGetBean从容器中查找
  3. 找不到的话 通过createBean doCreateBean方法,以反射的方式创建对象 一般情况下使用的是无参的构造方法 getDeclaredConstructor newInstance
  4. 进行对象的属性填充 populateBean
  5. 进行其他的初始化操作 initializingBean






提交评论