SPRING03_为什么要学习源码、基础的接口、SPRING工作流程详解

简介: ①. 为什么要学习源码?②. Spring基础接口③. Spring的工作流程详解

①. 为什么要学习源码?


①. 工作上:在我们后来的企业级开发期间,调试一些疑难BUG,肯定都要深入到框架底层来进行调试,那如果懂得框架底层源码的时候,在调试BUG期间就会知道这个BUG是由业务逻辑某一部分导致的还是框架底层导致的,因为现在市面上的任何一个框架都不能说是毫无BUG的,都在不断的更新迭代修复,所以学好框架源码这也是必要的


②. 面试上:在面试过程当中,设计模式与框架源码也是一个高频考点。比如经常会有面试官问到:你有没有掌握某一个框架的源码?你所知道的设计模式有哪些?如果你是用另一种角度来进行回答的:比如首先你挑了一个设计模式,也比较与众不同的,你没有挑工厂模式,没有挑单例,假设你挑了一个桥接模式或者是其他模式等。接下来你又在Spring的底层找了一处功能的源码实现,然后发现它使用的就是桥接模式,那接下来应该是这么回答:

(Spring源码的底层在对于某一个功能的实现的时候,它使用了桥接模式,桥接模式它是怎么用的,并在Spring底层又达到了怎么样的一个效果。那么相信这个回答一定是出彩于任何人的,所以这就是无论从什么维度来说都应该学好源码)


③. Spring里面有很多核心接口,只要把这些核心接口搞清楚了,那么Spring的整个运作就非常的清楚了。接下来我们将对Spring的整体流程先做个大概的介绍,后续将会对各个接口进行详解


②. Spring基础接口


①. Resource(资源)+ResourceLoader(资源加载器)

每写一个xml/注解配置都是一个Resource(资源),然后由ResourceLoader(资源加载器)去读取Resource(资源)里面的资源,然后读取完的这些资源,再转为BeanDefinition (Bean的定义信息)


②. BeanFactory(Bean工厂)

这是Spring框架里面最大的工厂,所有东西都在这个BeanFactory工厂里面


③. BeanDefinition(Bean的定义信息)

这是Bean的定义信息,这些定义信息都存在BeanDefinitionRegistry(档案馆里面)


④. BeanDefinitionReader(bean定义信息的读取器)

BeanDefinitionReader(bean定义信息的读取器)去读取资源,并把资源转成BeanDefinition,然后存到BeanDefinitionRegistry里面,最终进行制造


⑤. BeanDefinitionRegistry(Bean的注册中心)

这个是存Bean的定义信息的,可以理解成档案馆


⑥. ApplicationContext(IOC容器)


⑦. Aware(可装配,装配Spring底层的一些组件)


⑧. 生命周期-后置处理器

BeanFactoryPostProcessor

InitializingBean

BeanPostProcessor


③. Spring的工作流程详解


①. Spring暴露给程序员的就是要么写一个xml文件,要么就是写一堆注解

(所有的资源都被Spring用Resources来表示,这叫资源)


②. 这些资源(xml/注解),Spring底层有一个类叫ResourcesLoader(资源加载器),这个ResourcesLoader(资源加载器)就负责加载这些资源


③. 这些资源(xml/注解)写了一些组件或者功能配置,那么实际上在Spring的底层,所有的组件所有的配置都应该放在了BeanDefinition里面,也就是说(xml/注解)写的组件应该在底层对应一个叫BeanDefinition(bean的定义信息)


④. 那么BeanDefinition(bean的定义信息)怎么来的?

ResourcesLoader资源加载器,把这些(xml/注解)资源加载来以后交给BeanDefinitionReader(bean定义信息的读取器),然后将它解析成一个个的BeanDefinition对象


⑤. 放到Spring的哪里呢?.1 Spring底层所有的组件,都得有这个BeanDefinition(Bean定义信息),所以就放在了BeanDefinitionRegistry档案馆里面


⑥. BeanDefinitionRegistry的档案袋就是一个map,这个Map就保存每一个组件是如何定义的


⑦. 接下来就是把这些BeanDefinition(bean的定义信息)挨个给他创建成对象(只要这些对象创建完,那么就能在容器中可以获取)


⑧. 在整个对象创建过程中,是有各种池的:临时对象池(earlySingletonObjects),单例工厂池(singletonFactories),已注册的单例池(registeredSingletons),单例对象池(singletonObjects)。


⑨. 其中就有一个叫单例对象池(singletonObjects),所有创建好的单实例对象全放在这里

以后从工厂中获取,其实就是从这个单例对象池(singletonObjects)里面进行获取的


微信图片_20220108224330.png

相关文章
|
2月前
|
XML Java 数据格式
探索Spring之利剑:ApplicationContext接口
本文深入介绍了Spring框架中的核心接口ApplicationContext,解释了其作为应用容器的功能,包括事件发布、国际化支持等,并通过基于XML和注解的配置示例展示了如何使用ApplicationContext管理Bean实例。
113 6
|
3月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
97 9
|
4月前
|
存储 安全 Java
|
4月前
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
52 9
|
3月前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
48 0
|
4月前
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
36 1
|
30天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
251 17
Spring Boot 两种部署到服务器的方式
|
30天前
|
Dart 前端开发 JavaScript
springboot自动配置原理
Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
63 17
springboot自动配置原理
|
1月前
|
XML JavaScript Java
SpringBoot集成Shiro权限+Jwt认证
本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
88 11
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
374 12