spring源码详解(一)

2023-02-08 00:00:00 配置 定义 注册 工厂 传入

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存的就是bean的名字,这个map里存的就是单例,一级缓存(前面getBane就是从这个map里面取出来)

相关文章