拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 spring IOC的理解,原理与底层实作?

spring IOC的理解,原理与底层实作?

白鹭 - 2022-01-23 2094 0 0

从总体到区域

控制反转:理论思想,原来的物件是由使用者来进行控制,有了spring之后,可以把整个物件交给spring来帮我们进行管理
                DI(依赖注入):把对应的属性的值注入到具体的物件中,@Autowired,populateBean完成属性值的注入
容器:存盘物件,使用map结构来存盘,在spring中一般存在三级快取singletonObjects存放完整的bean物件,整个bean的生命周期,从创建到使用到销毁的程序全部都是由容器来管理(bean的生命周期)

 

局  (可结合之前的笔记中spring中容器和物件的创建流程图理解)

1、一般聊ioc容器的时候要涉及到容器的创建程序(beanFactory,DefaultListableBeanFactory),向bean工厂中设定一些自变量(BeanPostProcessor,Aware界面的子类)等等属性
2、加载决议bean物件,准备要创建的bean物件的定义物件beanDefinition,(xml或者注解的决议程序)
3、beanFactoryPostProcessor的处理,此处是扩展点,PlaceHolderConfigurSupport,ConfigurationClassPostProcessor
4、BeanPostProcessor的注册功能,方便后续对bean物件完成具体的扩展功能
5、通过反射的方式讲BeanDefinition物件实体化成具体的bean物件,
6、bean物件的初始化程序(填充属性,呼叫aware子类的方法,呼叫BeanPostProcessor前置处理方法,呼叫init-mehtod方法,呼叫BeanPostProcessor的后置处理方法)
7、生成完整的bean物件,通过getBean方法可以直接获取
8、销毁程序

 

 

自己的理解和了解过的实作程序

反射、工厂,关键的几个方法

createBeanFactory、getBean、doGetBean、createBeanInstance(getDeclaredConstructor, newInstance)、populateBean、initializingBean

 

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

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *