Bean的生命周期
Spring源码解读-AOP、事务
Spring循环依赖
1、谈谈对Spring IOC的理解,原理与实现
总:
控制反转:
- 理论思想,原来的对象是由使用者来进行控制,有了spring之后,可以把整个对象交给spring来帮我们进行管理
DI:依赖注入,把对应的属性的值注入到具体的对象中,@Autowired,populateBean完成属性值的注入 - 容器:存储对象,使用map结构来存储,在spring中一般存在三级缓存,singletonObjects存放完整的bean对象
整个bean的生命周期,从创建到使用到销毁的过程全部都是由容器来管理【bean的生命周期】
分:
- 一般聊ioc容器的时候要涉及到容器的创建过程(beanFactory,DefaultListableBeanFactory),向bean工厂中设置一些参数
(BeanPostProcessor,Aware接口的子类)等等属性 - 加载解析bean对象,准备要创建的bean对象的定义对象beanDefinition(xml或者注解的解析过程)
- beanFactoryPostProcessor的处理,此处是扩展点,PlaceHolderConfigurSupport,ConfigurationClassPostProcessor
- BeanPostProcessor的注册功能,方便后续对bean对象完成具体的扩展功能
- 通过反射的方式讲BeanDefinition对象实例化成具体的bean对象
- bean对象的初始化过程(填充属性,调用aware子类的方法,调用BeanPostProcessor前置处理方法,调用init-mehtod方法,调用
BeanPostProcessor的后置处理方法) - 生成完整的bean对象,通过getBean方法可以直接获取
- 销毁过程
spring中的bean都是通过反射的方式生成的,同时其中包含了很多的扩展点,比如最常用的对
BeanFactory的扩展,对bean的扩展(对占位符的处理),除此之外,ioc中最核心的也就是填
充具体bean的属性,和生命周期(背一下)。
2.谈一下springloc的底层实现
底层实现:工作原理,过程,数据结构,流程,设计模式,设计思想
你对他的理解和你了解过的实现过程
反射,工厂,设计模式,关键的几个方法
createBeanFactory,getBean,doGetBean,createBean,doCreateBean,createBeanInstance(getDeclaredConstructor,newinstance),populateBean,initializingBean
- 先通过createBeanFactory创建出一个Bean工厂(DefaultListableBeanFactory)
- 开始循环创建对象,因为容器中的bean默认都是单例的,所以优先通过getBeanta容器中查找,找不到的话,
- 通过createBeandoCreateBean方法,以反射的方式创建对象,一般情况下使用的是无参的构造方法(getDeclaredconstructor,
newInstance) - 进行对象的属性填充populateBear
- 进行其他的初始化操作(initializingBean)