Spring源码学习笔记
Jarvis.y
学到老,活到老~~~
展开
-
Spring 经典高频面试题
相关内容:架构师系列内容:架构师学习笔记(持续更新)1、什么是 Spring 框架?Spring 框架有哪些主要模块?Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring 帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring 框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成 Spring 框架,不必担心 Spring 是如何在后台进行工作的。Spring 框架至今已集成了 20 多.原创 2020-12-04 23:03:20 · 198 阅读 · 0 评论 -
Spring5的几个新特性
Spring5 新特性简述Spring 5 于 2017 年 9 月发布了通用版本 (GA),它标志着自 2013 年 12 月以来第一个主要Spring Framework 版本。它提供了一些人们期待已久的改进,还采用了一种全新的编程范例,以反应式描述中陈述的反应式原则为基础。这个版本是很长时间以来最令人激动的 Spring Framework 版本。Spring 5 兼容 Java™8 和 JDK 9,它集成了反应式流,以方便后续提供一种颠覆性方法来实现端点和 Web 应用程序开发。当然,反应式编程原创 2020-12-03 23:12:57 · 690 阅读 · 0 评论 -
Spring 事务传播原理及数据库事务操作原理
先看看 Spring 事务的基础配置<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst原创 2020-11-01 20:37:40 · 366 阅读 · 0 评论 -
30个类仿真手写spring框架V2.0版本
必读,代码只是模仿spring的一个大致设计思路,很多细节问题并没有考虑到,代码本身还存在很多的问题,只能供参考一下。从 Servlet 到 ApplicationContext我们已经了解 SpringMVC 的入口是 DispatcherSerlvet,我们实现了 DispatcherServlet 的 init()方法。在 init()方法中完成了 IOC 容器的初始化。而在我们使用Spring 的经验中,我们见得最多的是 ApplicationContext,似乎 Spring 托管的所有实例原创 2020-11-01 20:11:35 · 2493 阅读 · 0 评论 -
Spring MVC 使用优化建议
1、Controller 如果能保持单例,尽量使用单例这样可以减少创建对象和回收对象的开销。也就是说,如果 Controller 的类变量和实例变量可以以方法形参声明的尽量以方法的形参声明,不要以类变量和实例变量声明,这样可以避免线程安全问题。2、处理 Request 的方法中的形参务必加上@RequestParam 注解这样可以避免 Spring MVC 使用 asm 框架读取 class 文件获取方法参数名的过程。即便Spring MVC 对读取出的方法参数名进行了缓存,如果不要读取 class原创 2020-10-16 00:50:54 · 456 阅读 · 0 评论 -
一步一步手绘Spring MVC运行时序图(Spring MVC原理)
初探 Spring MVC 请求处理流程Spring MVC 相对于前面的章节算是比较简单的,我们首先引用《Spring in Action》上的一张图来了解 Spring MVC 的核心组件和大致处理流程:从上图中看到①、DispatcherServlet 是 SpringMVC 中的前端控制器(Front Controller),负责接收 Request 并将 Request 转发给对应的处理组件。②、HanlerMapping 是 SpringMVC 中完成 url 到 Controller原创 2020-10-16 00:50:03 · 1313 阅读 · 0 评论 -
Spring AOP切面使用详细解析
相关文章:SpringBoot AOP 使用一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)架构师系列内容:架构师学习笔记(持续更新))Spring AOP 应用场景AOP 是 OOP 的延续,是 Aspect Oriented Programming 的缩写,意思是面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP 可以说也是这种目标的一种实现.原创 2020-10-11 03:18:43 · 1049 阅读 · 3 评论 -
一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)
相关文章:SpringBoot AOP 使用Spring AOP使用详解架构师系列内容:架构师学习笔记(持续更新))Spring AOP 源码分析主要流程时序图创建代理对象导数第一个类写错了,应该为DefaultAopProxyFactory寻找入口Spring 的 AOP 是通过接入 BeanPostProcessor 后置处理器开始的,它是 Spring IOC 容器经常使用到的一个特性,这个 Bean 后置处理器是一个监听器,可以监听容器触发的 Bean 声明周期事件。后置处.原创 2020-10-11 03:18:04 · 654 阅读 · 0 评论 -
IOC 容器中那些鲜为人知的细节(关于 延时加载)
通过前面我们对 IOC 容器的实现和工作原理分析,我们已经知道 IOC 容器的初始化过程就是对 Bean定义资源的定位、载入和注册,此时容器对 Bean 的依赖注入并没有发生,依赖注入主要是在应用程序第一次向容器索取 Bean 时,通过 getBean()方法的调用完成。当 Bean 定义资源的元素中配置了 lazy-init=false 属性时,容器将会在初始化的时候对所配置的 Bean 进行预实例化,Bean 的依赖注入在容器初始化的时候就已经完成。这样,当应用程序第一次向容器索取被管理的 Bean原创 2020-10-07 23:41:10 · 281 阅读 · 0 评论 -
IOC 容器中那些鲜为人知的细节(关于 autowiring)
Spring IOC 容器提供了两种管理 Bean 依赖关系的方式:1)、显式管理:通过 BeanDefinition 的属性值和构造方法实现 Bean 依赖关系管理。2)、autowiring:Spring IOC 容器的依赖自动装配功能,不需要对 Bean 属性的依赖关系做显式的声明, 只需要在配置好 autowiring 属性,IOC 容器会自动使用反射查找属性的类型和名称,然后基于属性的类型或者名称来自动匹配容器中管理的 Bean,从而自动地完成依赖注入。通过对 autowiring 自动装配原创 2020-10-07 23:40:46 · 246 阅读 · 0 评论 -
IOC 容器中那些鲜为人知的细节(关于 FactoryBean 和 BeanFactory)
在 Spring 中,有两个很容易混淆的类:BeanFactory 和 FactoryBean。BeanFactory: Bean 工厂,是一个工厂(Factory),我们 Spring IOC 容器的最顶层接口就是这个BeanFactory,它的作用是管理 Bean,即实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。FactoryBean: 工厂 Bean,是一个 Bean,作用是产生其他 bean 实例。通常情况下,这种 Bean 没有什么特别的要求,仅需要提供一个工厂方法,该方法用来返回原创 2020-10-07 23:39:52 · 384 阅读 · 1 评论 -
一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)
1、博客内容均出自于咕泡学院架构师第三期1、Spring 自动装配之依赖注入依赖注入的关键类1、IOC容器 : BeanFactory getBean()、AbstractBeanFactory2、实例化策略 : SimpleInstantiationStrategy3、存储实例所有相关的信息scope、proxy、instance :BeanWrapper依赖注入执行细节依赖注入发生的时间当 Spring IOC 容器完成了 Bean 定义资源的定位、载入和解析注册以后,IOC .原创 2020-10-07 22:35:50 · 451 阅读 · 0 评论 -
一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程)
前言1、博客内容均出自于咕泡学院架构师第三期2、本章内容共分为三部分第一部分:一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程)第二部分:一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)第三部分:一步一步手绘Spring IOC运行时序图三(基于Annotation的IOC容器初始化)1、Spring 核心之 IOC 容器初体验IOC 与 DIIOC(Inversion of Control )控制反转:所谓控制反转,就是原创 2020-10-05 22:07:19 · 1168 阅读 · 0 评论 -
一步一步手绘Spring IOC运行时序图三(基于Annotation的IOC容器初始化)
前言1、博客内容均出自于咕泡学院架构师第三期2、本章内容共分为三部分第一部分:一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程)第二部分:一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)第三部分:一步一步手绘Spring IOC运行时序图三(基于Annotation的IOC容器初始化)基于 Annotation 的 IOC 初始化Annotation 的前世今生从 Spring2.0 以后的版本中,Spring 也引入了基原创 2020-10-05 22:06:16 · 445 阅读 · 0 评论 -
一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)
前言1、博客内容均出自于咕泡学院架构师第三期2、本章内容共分为三部分第一部分:一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程)第二部分:一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)第三部分:一步一步手绘Spring IOC运行时序图三(基于Annotation的IOC容器初始化)基于 Xml 的 IOC 容器的初始化IOC 容器的初始化包括 BeanDefinition 的 Resource 定位、加载和注册这三个基原创 2020-10-05 22:00:57 · 397 阅读 · 0 评论 -
模仿SpringMVC的DispatcherServlet 手撸300行代码提炼精华设计思想并保证功能可用(1.0版本)
前言博客内容全部出自于咕泡学院架构师课程第三期。内容为手写SpringMVC的DistapcherServlet的核心功能,从V1版本到V2版本再到V3版本。1、SpringMVC中的DispatcherServlet的核心功能是哪些?首先看一下mvc的流程:用户发送请求至前端控制器DispatcherServlet。DispatcherServlet收到请求调用HandlerMapping处理器映射器。处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处原创 2020-10-04 02:46:55 · 483 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之工厂模式
0、工厂模式(Factory Pattern)工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。工厂模式跟单例模式紧密相关1、简单工厂模式( Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例 属于创建型模式,但它不属于GOF的23种设计模式。简单工厂类负责创建的对象较少,客户端只需要传入工厂类的参数,对于如何创建原创 2020-09-13 21:20:07 · 343 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之单例模式
0、单例模式(Singleton Pattern)指确保一个类在任何情况下都绝对只有一个实例,并且提供一个全局访问点,隐藏其所有的构造方法,这种模式属于创建型模式。单例的实现主要是通过以下两个步骤:将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。原创 2020-09-16 01:47:24 · 267 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之委派模式
0、委派模式(Delegate Pattern)负责任务的调度和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。不属于GOF 232种设计模式之一。属于行为型模式。委派模式跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。委派模式在spring 中应用非常多,最常用的DispatcherServlet 其实就是用到了委派模式。应用场景:当你要实现表现层和业务层之间的松耦合的时候原创 2020-09-19 02:01:15 · 360 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之策略模式
0、策略模式(Strategy pattern)指定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户可以避免多重分支的if…else…和switch语句。适用场景:假如系统中有很多类,而它们的区别仅仅在于他们的行为不同。一个系统需要动态的在几种算法中选择一种。优缺点:优点:策略模式符合开闭原则。避免使用多重条件转移语句,如 if…else…语句、switch 语句。使用策略模式可以提高算法的保密性和安全性。缺点:客户端必须知道所原创 2020-09-19 02:09:38 · 650 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之模板模式
0、模板模式 || 模板方法模式(Template Method Pattern)指定义一个算法的骨架,并且允许子类为一个或者多个步骤提供实现方法。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。属于行为型设计模式。适用场景:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。体现:入职流程:填写入职登记表–>打印简历–>复印学历–>复印身份证–>签订劳动合同–&g原创 2020-09-20 03:04:01 · 401 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之适配器模式
0、适配器模式(Adapter Pattern)指将一个类的接口转换成客户期望的另外一个接口,使原本的接口不兼容的类可以一起工作。属于结构型设计模式。适用场景:已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况。适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案。有点亡羊补牢的感觉。生活中也非常的应用场景,例如电源插转换头、手机充电转换头、显示器转接头。在中国民用电都是 220V 交流电,但我们手机使用的锂电池使用原创 2020-09-20 03:11:56 · 584 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之原型模式
0、原型模式(Prototype Pattern)指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象原型模式主要适用于以下场景:类初始化消耗资源较多。new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)。构造函数比较复杂。循环体中生产大量对象时。在 Spring 中,原型模式应用得非常广泛。例如 scope=“prototype”,在我们经常用的 JSON.parseObject()也是一种原型模式。1、浅克隆一个标准的原型模式代码,应该是这样设计的。先创建原型原创 2020-09-21 01:24:00 · 572 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之装饰者模式
0、装饰者模式(Decorator Pattern)指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原油对象的功能)。属于结构型模式。适用场景:用于扩展一个类的功能或给一个类添加附加职责。动态的给一个对象添加功能,这些功能可以再动态的撤销优缺点:优点:装饰者是继承的有力补充,比继承灵活,不改变原有对象的情况下动态地给一个对象扩展功能,即插即用。通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果。装饰者完全遵守开闭原则。缺点:会原创 2020-09-22 00:51:22 · 1217 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之观察者模式
0、观察者模式(Observer Pattern)观察者模式也叫发布订阅模式。定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,当主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新。属于行为型模式。优缺点:优点:1、观察者和被观察者之间建立了一个抽象的耦合。2、观察者模式支持广播通信。缺点:1、观察者之间有过多的细节依赖、提高时间消耗及程序的复杂度。2、使用要得当,要避免循环调用。生活应用场景:微信朋友圈动态通知,知乎邀请答主回答问题,邮件通知,广播通知,桌面原创 2020-09-23 00:24:20 · 331 阅读 · 0 评论 -
Spring源码学习笔记:经典设计模式之代理模式
0、代理模式(Proxy Pattern)指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用。属于结构型设计模式。使用目的:保护目标对象增强目标对象代理模式分为静态代理,动态代理:静态代理只能通过手动完成代理操作,如果被代理类增加新的方法,代理类需要同步新增,违背开闭原则。动态代理采用在运行时动态生成代码的方式,取消了对被代理类的扩展限制,遵循开闭原则。若动态代理要对目标类的增强逻辑扩展,结合策略模式,只需要新增策略类便可完成,无需修改代理类的原创 2020-09-21 01:45:34 · 460 阅读 · 0 评论 -
Spring源码学习笔记:Spring设计模式对比和Spring的OOB,BOP,AOP,IOC,DI/DL
1、GOF 23总设计模式归纳分类设计模式创建型工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、 建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)结构型适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、 装饰器模式(Decorator)、门面模式(Facade)、享元模式(Flyweight)、 代理模式(Proxy)行为型解释器模式(In原创 2020-09-25 00:53:28 · 651 阅读 · 0 评论 -
Spring源码学习笔记:起源发展和核心模块主要职能
1、Spring 的前世今生早在 2007 年,一个基于 Java语言的开源框架正式发布,取了一个非常有活力且美好的名字,叫做 Spring。它是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高聚合。业务逻辑开发是原创 2020-09-27 00:51:44 · 446 阅读 · 0 评论