Spring源码拜读之总体介绍
- 核心模块
- spring-core:依赖注入IOC与DI的最基本实现
- spring-beans:Bean工厂于Bean的装配
- spring-context:IOC容器
- spring-aop:面向切面编程的应用模块,整合asm、cglib、jdkProxy
- spring-websocket:主要是与web前端的全双工通讯协议
- spring-webflux:一个新的非阻塞函数式Reactive Web框架,可以用来建立异步的,非阻塞、事件驱动的服务 通信报文模块
- 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. 流程
- 监听servlet容器启动开始创建context
- 创建context:createWebApplicationContext 默认XmlWebApplicationContext
- 读取配置:加载spring-context.xml 并读取servletConfigInitParams配置的参数
- 加载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);
小结:
- springioc其实就是工厂+广播
- 工厂: 加载配置文件,反射生成bean对象,加载到map中
- 广播:初始化广播器,注册监听器,发布事件触发监听器
Spring源码拜读之总体介绍相关推荐
- Spring源码系列- Spring Beans - 核心类的基本介绍
Spring源码系列- Spring Beans - 核心类的基本介绍 读过上一篇文章的读者应该都能对Spring的体系结构有一个大致的了解,在结尾处,我也说过会从spring-beans包开始分析, ...
- 【Spring源码】Spring Transactional事务:传播机制(Propagation) 介绍 和 源码剖析
[Spring源码]Spring Transactional事务:传播机制(Propagation) 源码剖析 关键词 AMethod调用BMethod,转载BMethod的角度来考虑:站在被调用者的 ...
- 我该如何学习spring源码以及解析bean定义的注册
如何学习spring源码 前言 本文属于spring源码解析的系列文章之一,文章主要是介绍如何学习spring的源码,希望能够最大限度的帮助到有需要的人.文章总体难度不大,但比较繁重,学习时一定要耐住 ...
- idea调试源代码c语言,IDEA阅读spring源码并调试
目标:搭建起Spring源码阅读和代码调试跟踪的环境,顺便建立一个简单的Demo,能够调试Spring的源代码 本节,主要介绍一下Spring源码阅读和调试的相关环境搭建,并使用MVN创建一个非常简单 ...
- Spring源码解析-bean实例化
Spring源码解析-bean实例化 本文介绍Spring创建 bean 过程中的第一个步骤:实例化 bean. 1. Bean实例化源码 虽然实例化Bean有多种方式(包括静态工厂和工厂实例 ...
- 【Java】【系列篇】【Spring源码解析】【三】【体系】【BeanFactory体系】
BeanFactory体系 BeanFactory整体结构体系图 顶层接口-BeanFactory 1.1.描述 1.2.方法解析(15个) 1.2.1.属性 1.2.2.获取bean实例 1.2.3 ...
- 程序员如何应对中年危机,撸了大神写的spring源码笔记,超详细
前言: 我们通常在面试的时候难免会慌张不已.想必,经历过的人都能体会.但是如果你提前预测和准备面试官要问你的问题,并想出合理的回答方式,就会轻松很多.所以接下来的面试题是我从自己和其他人的面试经历中总 ...
- Spring 源码分析(四) ——MVC(二)概述
随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) from:Spring 源码分析(四) --MVC(二)概述 - 水门-kay的个人页面 - OSCHINA ...
- Spring 源码分析衍生篇十三 :事务扩展机制 TransactionSynchronization
文章目录 一.前言 二.TransactionSynchronization 1. TransactionSynchronization 1.1 TransactionSynchronization ...
最新文章
- pycharm专业版使用jupyter notebook并且进行调试
- PHP serialize JSON 解析
- 性能测试工具MultiMechanize的使用介绍
- 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
- python生成器函数_Python 编写生成器函数
- 怎么把matlab 训练的model 保存下来 然后在opencv 中调用
- 开发黑名单功能demo_突然让你开发Electron应用-electron特性练习操场-所见即所得的electron...
- SSH整合之四(页面逻辑的实现)
- linux配置yum源、mount及yum命令
- python画二元一次函数图像_Python实现的拟合二元一次函数功能示例【基于scipy模块】...
- HTML---表格table标签中thead、tbody、tfoot的作用
- VS 由于找不到ucrtbased.dll,无法继续执行代码。
- java地图开发视频教程_java开发地图教程
- QQ5.1 去广告显IP新春完美版【木子李作品】
- <artifactId>spring-boot-maven-plugin</artifactId> 这一行在POM.xml文件中一直爆红,如何解决.问题记录日期:2020-09-05
- LIGO引力波探测原理
- 如何创新与加强个人领导力
- 查阅相关文献描述CN,SMC,EMCI,LMCI,AD五类疾病的早期干预和诊断标准|2022数维杯国赛C题
- linux系统上ros安装,Ubuntu中安装ROS Kinetic
- autorun.vbs病毒专杀
热门文章
- 投屏为什么显示无法连接服务器,乐播投屏为什么连不上? 乐播投屏无法连接如何解决?...
- Docker安装与入门级使用
- Creo二次开发:批量生成工程图
- java outputstream下载_java – Spring OutputStream – 用IE下载pptx
- 软件工程中的一些英文缩写
- Linux中vi的用法
- 微信小程序之模板消息
- 数据可视化_DataV
- typescript记录
- 设置阿里云镜像(registry.cn-beijing.aliyuncs.com)登录凭证