1. 核心模块

    1. spring-core:依赖注入IOC与DI的最基本实现
    2. spring-beans:Bean工厂于Bean的装配
    3. spring-context:IOC容器
    4. spring-aop:面向切面编程的应用模块,整合asm、cglib、jdkProxy
    5. spring-websocket:主要是与web前端的全双工通讯协议
    6. spring-webflux:一个新的非阻塞函数式Reactive Web框架,可以用来建立异步的,非阻塞、事件驱动的服务 通信报文模块
  2. spring中使用到的设计模式
1.模板方法模式应用场景:JdbcTemplate、HttpServlet
2.简单工厂应用场景:spring中有两种bean,一种是普通bean,另一种是工厂bean。FactoryBean就是spring中工厂类的顶级接口,当通过类名获取类的实例的时候,如果该类是一个工厂类即实现了Factory,他会自动调用其getObject方法,返回真的需要的对象。
3.工厂方法应用场景:使用xml配置bean的时候,bean标签有个factory-method属性,该属性的值生成类的静态方法名。
4.观察者应用场景:ContextLoaderListener
5.装饰器应用场景:HttpHeadResponseDecorator
6.代理应用场景:ProxyFactory、JdkDynamicFactory、CglibAopFactory
7.单例应用场景:spring中的bean默认是单例的。
8.适配器应用场景:AdvisorAdapter、HanderAdapter
9.原型模式:应用场景:ProtorypeBean

2.  流程

  1. 监听servlet容器启动开始创建context
  2. 创建context:createWebApplicationContext 默认XmlWebApplicationContext
  3. 读取配置:加载spring-context.xml 并读取servletConfigInitParams配置的参数
  4. 加载bean对象:解析bean标签 加载bean工厂
                        prepareRefresh();// Tell the subclass to refresh the internal bean factory.ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();// Prepare the bean factory for use in this context.prepareBeanFactory(beanFactory);try {// Allows post-processing of the bean factory in context subclasses.postProcessBeanFactory(beanFactory);// Invoke factory processors registered as beans in the context.invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation.registerBeanPostProcessors(beanFactory);// 为了国际化配置,Initialize message source for this context.initMessageSource();// 初始化事件广播器:Initialize event multicaster for this context.initApplicationEventMulticaster();// Initialize other special beans in specific context subclasses.onRefresh();// 注册广播监听器:Check for listener beans and register them.registerListeners();// Instantiate all remaining (non-lazy-init) singletons.finishBeanFactoryInitialization(beanFactory);// 发布事件 Last step: publish corresponding event.finishRefresh();
最后一步会触发springmvc容器的加载initMultipartResolver(context);initLocaleResolver(context);initThemeResolver(context);initHandlerMappings(context);initHandlerAdapters(context);initHandlerExceptionResolvers(context);initRequestToViewNameTranslator(context);initViewResolvers(context);initFlashMapManager(context);

小结:

  1. springioc其实就是工厂+广播
  2. 工厂: 加载配置文件,反射生成bean对象,加载到map中
  3. 广播:初始化广播器,注册监听器,发布事件触发监听器

Spring源码拜读之总体介绍相关推荐

  1. Spring源码系列- Spring Beans - 核心类的基本介绍

    Spring源码系列- Spring Beans - 核心类的基本介绍 读过上一篇文章的读者应该都能对Spring的体系结构有一个大致的了解,在结尾处,我也说过会从spring-beans包开始分析, ...

  2. 【Spring源码】Spring Transactional事务:传播机制(Propagation) 介绍 和 源码剖析

    [Spring源码]Spring Transactional事务:传播机制(Propagation) 源码剖析 关键词 AMethod调用BMethod,转载BMethod的角度来考虑:站在被调用者的 ...

  3. 我该如何学习spring源码以及解析bean定义的注册

    如何学习spring源码 前言 本文属于spring源码解析的系列文章之一,文章主要是介绍如何学习spring的源码,希望能够最大限度的帮助到有需要的人.文章总体难度不大,但比较繁重,学习时一定要耐住 ...

  4. idea调试源代码c语言,IDEA阅读spring源码并调试

    目标:搭建起Spring源码阅读和代码调试跟踪的环境,顺便建立一个简单的Demo,能够调试Spring的源代码 本节,主要介绍一下Spring源码阅读和调试的相关环境搭建,并使用MVN创建一个非常简单 ...

  5. Spring源码解析-bean实例化

    Spring源码解析-bean实例化 ​ 本文介绍Spring创建 bean 过程中的第一个步骤:实例化 bean. 1. Bean实例化源码 ​ 虽然实例化Bean有多种方式(包括静态工厂和工厂实例 ...

  6. 【Java】【系列篇】【Spring源码解析】【三】【体系】【BeanFactory体系】

    BeanFactory体系 BeanFactory整体结构体系图 顶层接口-BeanFactory 1.1.描述 1.2.方法解析(15个) 1.2.1.属性 1.2.2.获取bean实例 1.2.3 ...

  7. 程序员如何应对中年危机,撸了大神写的spring源码笔记,超详细

    前言: 我们通常在面试的时候难免会慌张不已.想必,经历过的人都能体会.但是如果你提前预测和准备面试官要问你的问题,并想出合理的回答方式,就会轻松很多.所以接下来的面试题是我从自己和其他人的面试经历中总 ...

  8. Spring 源码分析(四) ——MVC(二)概述

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) from:Spring 源码分析(四) --MVC(二)概述 - 水门-kay的个人页面 - OSCHINA ...

  9. Spring 源码分析衍生篇十三 :事务扩展机制 TransactionSynchronization

    文章目录 一.前言 二.TransactionSynchronization 1. TransactionSynchronization 1.1 TransactionSynchronization ...

最新文章

  1. pycharm专业版使用jupyter notebook并且进行调试
  2. PHP serialize JSON 解析
  3. 性能测试工具MultiMechanize的使用介绍
  4. 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
  5. python生成器函数_Python 编写生成器函数
  6. 怎么把matlab 训练的model 保存下来 然后在opencv 中调用
  7. 开发黑名单功能demo_突然让你开发Electron应用-electron特性练习操场-所见即所得的electron...
  8. SSH整合之四(页面逻辑的实现)
  9. linux配置yum源、mount及yum命令
  10. python画二元一次函数图像_Python实现的拟合二元一次函数功能示例【基于scipy模块】...
  11. HTML---表格table标签中thead、tbody、tfoot的作用
  12. VS 由于找不到ucrtbased.dll,无法继续执行代码。
  13. java地图开发视频教程_java开发地图教程
  14. QQ5.1 去广告显IP新春完美版【木子李作品】
  15. <artifactId>spring-boot-maven-plugin</artifactId> 这一行在POM.xml文件中一直爆红,如何解决.问题记录日期:2020-09-05
  16. LIGO引力波探测原理
  17. 如何创新与加强个人领导力
  18. 查阅相关文献描述CN,SMC,EMCI,LMCI,AD五类疾病的早期干预和诊断标准|2022数维杯国赛C题
  19. linux系统上ros安装,Ubuntu中安装ROS Kinetic
  20. autorun.vbs病毒专杀

热门文章

  1. 投屏为什么显示无法连接服务器,乐播投屏为什么连不上? 乐播投屏无法连接如何解决?...
  2. Docker安装与入门级使用
  3. Creo二次开发:批量生成工程图
  4. java outputstream下载_java – Spring OutputStream – 用IE下载pptx
  5. 软件工程中的一些英文缩写
  6. Linux中vi的用法
  7. 微信小程序之模板消息
  8. 数据可视化_DataV
  9. typescript记录
  10. 设置阿里云镜像(registry.cn-beijing.aliyuncs.com)登录凭证