为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
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) 中。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消