spring bean的产生过程

此文章为个人学习过程记录,不足之处。路过的大佬多多指正!!!
话不多说,上图。
在这里插入图片描述
在这里插入图片描述
1、我们先是在一个类上添加注解@Service或者@Component
2、当spring启动的时候 通过@componentScan进行扫描包下的所有类(注解)
3、这个时候spring不会直接去创建bean的对象,而是实现beandefinition的子类(实现类),这个是子类就是用来记录需要去创建的类的信息(constructorArgumentValue(构造方法的参数)、isAbstract、description、factoryMethod、beanName、beanClass、beanScope、propertyValue、autoModel、parentName、isLazy、isDependOn(控制bean加载顺序
)、isPrimary、FactoryBeanName),然后在将这个类放进一个beanDefinitMap中,因为spring可能会扫描到多个类,spring可能会进行多次解析,解析完成后,这个map中就会出现多个beandefinition子类对象,然后spring会调用一个preInstantiateSingletons() new object去遍历map中的beandefinition子类对象信息(此时这些子类对象包含了原先的类信息),验证(根据上方英文类的信息,比如isLazy,BeanScope是不是单例)成功之后会将对象放进spring的一个单例池(这个单例池也是一个map)中。这是说的是单例对象,如果是原型对象,是在getBean的时候去初始化对象。
如何对spring源码进行扩展
在spring解析完成放进map之后,调用preInstantiateSingletons() new object之前,去实现了一个BeanFactoryPostProcessor接口,就调用spring扩展的一些方法,把map传进方法,遍历map,改变了类中对应的beandefinition子类对象的一些属性,再将改变之后的对象重新放进map。就完成了对spring的扩展
//初始化spring容器
AnnotationConfigApplicationText ac = new AnnotationConfigApplicationContext(本类名.class)
Ac.getBeanDefinitionNames()//获取map中的key,可以说是map中存放的类的名字作为了key

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值