Spring

作者: 年少时难免轻狂Ho | 来源:发表于2021-06-15 11:12 被阅读0次

    1.谈谈你对SpringIOC的理解,原理与实现

    总:控制反转,容器

    控制反转:原来的对象由使用者控制,现在有了Spring后,可以把整个对象交由Spring管理
    DI:把对应的属性值注入到具体的对象当中,可通过@Autoiware和populater完成属性的注入
    容器:存放具体对象,使用map结构,在Spring中一般存在三级缓存中,singletonObject存放完整对象。在整个bean的生命周期从c创建到销毁的过程全部是由容器管理。

    容器的创建过程:

    1.通过BeanFacory,DefaultListableBeanFactory向Bean工厂中设置一下参数(beanPost Processer,aware接口的子类)等属性
    2.加载解析Bean对象,准备要创建的bean对象的定义对Beandefinition(xml或注解)
    3.beanFactoryPostProcess的处理,此处是扩展点
    4.beanPostProcess注册,方便后续bean对象完成具体的扩展功能
    5.通过反射将BeanDefinition对象实例化成具体的对象
    6.bean对象的初始化过程(填充属性,调用aware子类方法,对用beanPostProcess前置方法,调用initial-method,调用beanPostProcess后置方法)
    7.生成完成的Bean对象,通过getBean方法可以直接获取
    8.销毁

    没有看过源码

    具体的细节我不太记得了,但spring中的bean都是通过反射的方式进行创建的,通知包含了很多的扩展点,比如最常用的对BeanFactaory的扩展,对Bean的扩展(对占位符的扩展),除此之外IOC最核心的就是填充Bean的具体属性和生命周期

    2.谈一下IOC的底层实现

    你对它的理解和你了解的实现过程
    反射、工厂、设计模式
    关键的方法:creatBeanFactory,getBean,doGetBean,createBean,doCreateBean,create Bean Instance,populateBean,initalizingBean
    1.先通过creatBeanFactory创建一个bean工程(DefaultlisableBeanFactory)
    2.循环创建对象,因为容器中的bean都是单例的,所以优先通过getbean和doGetbean在容器中进行查找,找不到的话
    3.通过creatBean和doCreateBean以反射的方式创建对象,一般通过无参的构造方法
    4.对对象属性的填充populateBean
    5.进行其他的初始化操作(initalizingBean)

    3.描述一下Bean的生命周期

    spring bean的生命周期

    4.Spring是如何解决循环依赖的问题?

    5.BeanFactory与Factory Bean的区别

    6.Spring中用到的设计模式

    7.SpringAOP的底层实现原理

    8.Spring的事务管理是如何实现的

    9.谈一下食物的传播

    相关文章

      网友评论

          本文标题:Spring

          本文链接:https://www.haomeiwen.com/subject/kzzaeltx.html