spring源码详解(一)
Ioc容器是控制反转,解决层与层之间的耦合问题。没出来之前如果想引用其他类需要new 对象,当出现ioc之后,通过DI依赖注入的方式引用。container里面管理着bean。
第一步需要把bean交给container管理,需要xml配置或者注解。
第二步加载spring上下文,classPathXmlApplicationContext(“xml”) 和
annotationApplication(xxx.class)获取bean。
第三步getBean。
beanFactory spring顶层核心接口,使用了简单工厂模式,根据传入的唯一来获取bean对象,但是否在传入参数后创建还传入参数前创建这个要根据具体情况来定。主要责任就是负责生产bean。
简单工厂模式:由一个工厂类根据传入的参数,动态决定返回哪个产品类。
举个例子:
你(类)配置了@component,图纸需求可能有@lazy@Scope。
衣柜店(applicationContext):必须有个设计师,根据要求设计需要的bean,设计图纸给 beanFactory生产。
工厂(beanFactory):生成成品 衣柜。
销售beanDefinationReader:来读取衣柜进行卖出,也就是读取配置类或者xml。(annotationBeanDefini tionReader和xmlBeanDefinitionReader)
接待beanDefinationScanner:当100个人只有10个人配置了@component,负责扫描需要注册进容器的bean。
BeanDefinitionRegistry:bean定义的注册(设计师),把bean的定义注册到beanDefinition的map里。
beanDefinition:bean的定义(图纸)存在容器beanDefinitionMap里面。
流程就是先reader读取我们的配置类,然后scanner扫描我们需要的配置类,需要的则注册进入beanDefinitionMap里面。
在beanFactory之前都是由applicationContext负责扫描bean定义,注册到beanFactory,后面才交给bean工厂管理。
提供扩展接口,对我们的bean定义做扩展,beanFactoryPostProcessor。主要作用就是在getBean之前修改我们的bean定义。
beanDefinitionRegisterPostPrecessor,用来注册bean定义。
前面是工厂的后置处理器,后面bean的后置处理器beanPostProcessor。
当进入ioc 容器之后?
实例化,一种通过反射,比如@component(直接作用在类上),通过spring实例化。一种通过工厂方法,可以通过自己控制new 的过程,比如@Bean注解+@Configuration。
填充属性@autowired,在填充属性的时候,会遇到循坏依赖问题。
初始化initMethod destory
初始化之后?
Put到Map<key,value>,key存的就是bean的名字,这个map里存的就是单例,一级缓存(前面getBane就是从这个map里面取出来)
相关文章
- PyTorch中的In-place操作是什么?为什么要避免使用这种操作?
- 【建议收藏】CV学习路径推荐
- 数据可视化软件有哪些?
- 关于机器学习模型的可解释性算法!
- Ctrl-VIO:基于连续时间的卷帘相机视觉惯性里程计方案
- FEC:用于点云分割的快速欧几里德聚类方法
- 基于视觉语义信息的建图与定位综述
- labelCloud:用于三维点云物体检测的轻量级标注工具
- AI | 深度学习GPU怎么选(建议收藏)
- 什么是4D成像雷达
- TJ4DRadSet:自动驾驶4D成像雷达数据集
- RadarSLAM:可用于全天候的大规模场景的毫米波雷达SLAM
- 使用 OpenCV 的基于标记的增强现实
- M2DP:一种新的三维点云描述子及其在回环检测中的应用
- 使用 CLIP 对没有任何标签的图像进行分类
- CloudCompare中CCCoreLib模块介绍
- 即将开源STD:用于3D位置识别的稳定三角形描述子
- 单测在商家前端业务中的实践
- LOCUS 2.0:基于激光雷达的鲁棒且高效的3D实时建图
- 简析CloudCompare文件夹之间的关系