首先,总的概括IOC定义,如下:IOC 就是控制反转,原来对象是由使用者来控制,有了spring之后,对象交由spring来控制管理,这就是IOC控制反转。DI,依赖注入,把对应的属性值注入到对象中,比如通过注解的方式@Auotowired,完成属性的注入。
IOC,它是一个容器,用来存储对象,使用map结构来存储,在spring中一般存在三级缓存,singletonObjects存放完整的bean对象,整个bean的生命周期,从创建到使用到销毁的过程全部都是由容器来管理------->>(bean的生命周期)。
spring中的bean都是通过反射的方式生成的,同时其中包含了很多扩展点,比如最常用的就是对BeanFactory的扩展,对bean的扩展,除此之外,IOC最核心的也就是填充具体bean的属性和生命周期。
扩展:
bean的生命周期主要包含四个方面,首先实例化Bean对象,然后设置Bean的属性,然后进行bean的初始化操作,最后是销毁bean 。在初始化阶段,有一个特别重要的接口是BeanPostProcessor,在初始化前、后调用 。
详细参考下一篇文章:浅谈spring中bean的生命周期(二)_`宝子的博客-CSDN博客
补充:
IOC底层实现:就是通过反射、创建beanFactory(工厂)
其中关键的几个方法:createBeanFactory,
getBean,doGetBean,createBean,doCreateBean,createBeanInstance等。
解释描述上述几个方法:
1、通过creteBeanFacory创建一个Bean工厂;
2、开始循环创建对象,因为容器中的bean都是默认单例的,所以优先通过getBean,doGetBean从容器中查找,找不到的话,
3、通过cetateBean和doCreateBean方法,通过的反射的方式创建对象,一般情况下使用的是无惨构造方法,
4、然后进行对象的属性填充;(populateBean)
5、最后进行其他初始化操作.。(initializingBean)