第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

spring源碼分析(一)bean的生命周期之Bean的初始化

標(biāo)簽:
Java

一,如何把对象注入到springIoc容器中
1. 扫包 + 注解 (@ComponentScan + @Controller, @Service, @Repository, @Component
2. @Configuration + @Bean (此方法生效的前提是@ComponentScan存在)
3. 开关类@EnableAutoConfiguration 启用Import机制 (通常此注解注入的多为maven引入的依赖以及sdk中需要ioc容器管理的对象)他的原理是扫描jar包中的META-INF/spring.factories 把这下面标注的类通过扫描加入到数组中,然后统一注入到ioc容器中。
4.(不常用)通过@ImportResource("xxx.xml") 引入老项目的xml配置文件实现ioc容器的注入。

二,以上四种是注入方式,bean的注入到销毁的这个过程则被称为bean的生命周期
1.运行main方法的时候,首先会通过类加载器把全部的类加载到虚拟机中(是全部加载不是按需加载)。
2.初始化spring容器的时候(此处为按需加载) 他会找到符合上面四种注入方式的类
这时候不是立马new一个对象, 他会先对对象进行解析看是否需要创建bean(因为他拿到这个类的时候,不确定他是不是单例singleton只有单例在创建容器的时候创建,原型Prototype和懒加载模式@lazy(true) 是在getBean("xxx.class")的时候创建bean的)
3.这时候他会循环创建BeanDefinition的实现类的对象(根据注入进来的类) 他会给每个类都创建一个BeanDefinition的实现类的对象,把各个属性注入到BeanDefinition(包含当前像创建bean对象的所有信息)
他会把spring创建的BeanDefinition放入到一个map中去同时把类名放进一个list,此处的list是保证对象创建的顺序的因为list是有序的
3.1 在这一步可以对spring进行扩展,这也是我们学习源码的主要目的之一
在这里可以通过实现接口BeanFactoryPostProcessor 的方式可以对这个类的各种属性进行修改这一步是在放入map之后调用一个方法preInstantiateSingletons new Object去创建bean之前执行的 接口BeanFactoryPostProcessor 接管这个存放BeanDefinition的map 然后去处理。
3.2 判断是否需要现在就去创建这个bean。
4.怎么判断 :这个map里面的各种属性符合创建bean的条件,它会调用一个方法preInstantiateSingletons new Object去创建bean,BeanDefinition这里相当于根据一个类的元数据去创建bean
5.创建成功的bean会被放进一个spring单例池(一个map) 中。

點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消