栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring源码学习笔记1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring源码学习笔记1

spring源码学习笔记
    最近在研究spring framework IOC 容器启动的源码,spring版本为5.3.0-M1,本文从一个简单的示例着手跟踪spring 启动流程,以及获取bean的过程。
MainTest类:spring启动到加载bean的执行过程:
 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
	 HelloService helloService = (HelloService) applicationContext.getBean("helloService");
 System.out.println("=====######========"+helloService.say());
代码执行步骤:
1、main:12, MainTest (com.sp.learn)
2、:85, ClassPathXmlApplicationContext (org.springframework.context.support)
3、:145, ClassPathXmlApplicationContext (org.springframework.context.support) --设置应用上下文的配置位置
4、refresh:541, AbstractApplicationContext (org.springframework.context.support) --进行上下文刷新
     4-1、prepareRefresh:537,AbstractApplicationContext (org.springframework.context.support)   --准备上下文环境以进行刷新、设置启动日期、活动标志以及执行任何属性源的初始化。
     4-2、obtainFreshBeanFactory:669, AbstractApplicationContext (org.springframework.context.support) --开始创建DefaultListableBeanFactory
            refreshBeanFactory:127, AbstractRefreshableApplicationContext (org.springframework.context.support) --执行上下文底层 bean 工厂的实际刷新,关闭先前的 bean 工厂(如果有)并为上下文生命周期的下一阶段初始化一个新的 bean 工厂。
            createBeanFactory:197, AbstractRefreshableApplicationContext (org.springframework.context.support)  --创建DefaultListableBeanFactory
              :201, DefaultListableBeanFactory (org.springframework.beans.factory.support)
              :201, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
              :185, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support) --忽略BeanNameAware、BeanFactoryAware、BeanClassLoaderAware接口的自动装配;设置创建Bean实例的策略SimpleInstantiationStrategy
            beanFactory.setSerializationId(getId()) --设置唯一ID用于序列化
            customizeBeanFactory:129,AbstractRefreshableApplicationContext (org.springframework.context.support) --自定义设置BeanFactory的一些属性,是否允许循环依赖、是否允许Bean的定义信息被覆盖等
            loadBeanDefinitions:83, AbstractXmlApplicationContext (org.springframework.context.support) --通过 XmlBeanDefinitionReader 加载 bean 定义。
     4-3、prepareBeanFactory:545, AbstractApplicationContext (org.springframework.context.support) --对BeanFactory进行一些预操作
     4-4、postProcessBeanFactory:550,AbstractApplicationContext (org.springframework.context.support) --允许这里对BeanFactory做一些处理,默认空实现
     4-5、invokeBeanFactoryPostProcessors:554, AbstractApplicationContext (org.springframework.context.support) --执行BeanFactory的后置处理器
     4-6、registerBeanPostProcessors:558, AbstractApplicationContext (org.springframework.context.support) --实例化并注册所有 BeanPostProcessor 到BeanFactory   
     4-7、initMessageSource:562, AbstractApplicationContext (org.springframework.context.support) --国际化
     4-8、initApplicationEventMulticaster:566, AbstractApplicationContext (org.springframework.context.support) --初始化事件多播器 如果spring容器中有没有EventMulticaster,没有的话使用默认的SimpleApplicationEventMulticaster 
     4-9、onRefresh:861, AbstractApplicationContext (org.springframework.context.support) --初始化一些特殊的bean ,交给子类实现,默认空实现
     4-10、registerListeners:869, AbstractApplicationContext (org.springframework.context.support) --注册ApplicationListener到事件传播器中
     4-11、finishBeanFactoryInitialization:898, AbstractApplicationContext (org.springframework.context.support) --实例化所有剩余的(非延迟初始化)单例
     4-12、finishRefresh:935, AbstractApplicationContext (org.springframework.context.support) --容器构建结束,发布相应的事件。
     4-13、resetCommonCaches:973, AbstractApplicationContext (org.springframework.context.support) --清除缓存
5、getBean:1160, AbstractApplicationContext (org.springframework.context.support) 
     getBean:204, AbstractBeanFactory (org.springframework.beans.factory.support)
       doGetBean:248, AbstractBeanFactory (org.springframework.beans.factory.support)
         transformedBeanName:1237, AbstractBeanFactory (org.springframework.beans.factory.support) --返回实际的bean名称,去除工厂引用前缀&(如果有,也去除重复的工厂前缀(如果找到))。
         getSingleton:168, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support) --先尝试从1级缓存singletonObjects中查找,找到直接返回,否则,判断是否正在创建中singletonsCurrentlyInCreation.contains(BeanName),否则返回null,如果是,则加锁保证原子性,从2级缓存earlySingletonObjects中查找,如果找到直接返回,否则判断是否允许循环依赖,否则返回Null,允许则从3级缓存singletonFactories获取ObjectFactory ,不为空则执行getObject()方法,并把返回的Object放到2级缓存earlySingletonObjects中,最后把3级缓存的移除掉。
         getObjectForBeanInstance:1288, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support) --获取 Bean 实例的对象
         
6、获取bean,执行Bean的方法。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886091.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号