Spring源码
文章平均质量分 85
分析Spring主要的基本流程
狗的屎壳郎
菜鸡
展开
-
Spring源码前置概念
BeanDefinitionbeanDefinition表示Bean定义,是spring用来生产实例Bean的元数据,如@Component,@Bean,标签等都会解析成bean定义供后续spring容器去生产bean实例。有以下几个主要的属性。scope:表示bean的作用域,如单例beansingleton(默认),多例prototype,request每次请求重新实例化,Session每个会话对内是单例的lazyInit:是否需要懒加载,懒加载在第一次使用bean时才会被实例化,非懒加载在s原创 2022-04-16 15:36:42 · 206 阅读 · 0 评论 -
基于配置类的Spring容器启动流程
下面将运行一个最基本的Demo,从容器获取C对象,直接Debug源码看看做了什么AnnotationConfigApplicationContext类图,主要做了3件事情查看父类GenericApplicationContext的构造方法,发现创建了一个DefaultListableBeanFactory,public GenericApplicationContext() { this.beanFactory = new DefaultListableBeanFactory(); }原创 2022-04-16 23:28:53 · 477 阅读 · 0 评论 -
refresh之invokeBeanFactoryPostProcessors
invokeBeanFactoryPostProcessors翻译过来就是执行beanDefinition后置处理器的意思,所以这个方法就是bean定义的扩展点了,第一篇已经介绍过了后置处理器的相关概念,下面先介绍几个属性regularPostProcessors:用来存放BeanFactoryPostProcessorregistryProcessors:用来存放BeanDefinitionRegistryPostProcessorcurrentRegistryProcessors:临时变量,也是原创 2022-04-17 16:52:25 · 88 阅读 · 0 评论 -
解析配置文件之ConfigurationClassPostProcessor
前面有提及到在beanDefinition后置处理器阶段会去执行ConfigurationClassPostProcessor重写的postProcessBeanDefinitionRegistry方法@Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) { int registryId = System.identityHashCode(registry); if (th原创 2022-04-19 15:25:08 · 521 阅读 · 0 评论 -
refresh之finishBeanFactoryInitialization(beanFactory)
finishBeanFactoryInitialization(beanFactory)这个方法是来实例化所有的非懒加载的Bean的,在前面已经将配置文件解析成了beanDefinition,现在准备生产,这个过程涉及来几个重要的概念bean的生命周期循环依赖三级缓存bean的后置处理器protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // Initia原创 2022-04-24 20:47:57 · 577 阅读 · 0 评论 -
循环依赖-三级缓存
循环依赖概念spring容器帮助我们管理对象,简称Bean,大多数情况下我们都是使用单例bean,也就是从容器中重复利用这个Bean,在生成Bean的过程中需要为某些成员变量赋值,比如现在有类A和B被spring容器管理,A类中有个依赖容器成员变量B,B类中有个依赖容器的成员变量A。@Componentpublic class A { @Autowired private B b;}@Componentpublic class B{ @Autowired private A a;}原创 2022-04-26 21:43:55 · 1584 阅读 · 0 评论