本博客通过debug方式简单跟一下Springboot application启动的源码,Springboot的启动源码是比较复杂的,本博客只是简单梳理一下源码,浅析其原理 为了方便跟源码,先找个Application类,打个断点,进行调试,如图所示: step into,run方法调用了SpringApplication的run方法 通过debug,Springboot启动过程,会先执行如下关键的构造函数 分析构造函数源码: public SpringApplication(ResourceL…
目录 1.博客前言简单介绍 2.定制servlet容器 3.变换servlet容器 4.servlet容器启动原理 SpringBoot源码学习系列之嵌入式Servlet容器启动原理 @ 1.博客前言简单介绍 SpringBoot的自动配置就是SpringBoot的精髓所在,对于SpringBoot具体实现不是很清楚的读者,可以读取我的源码学习专栏,里面有对SpringBoot的源码进行学习的一些博客,内容比较简单,比较适合入门学习 对于SpringBoot项目是不需要配置Tomcat.jett…
SpringBoot源码学习系列之异常处理自动配置 1.源码学习 先给个SpringBoot中的异常例子,假如访问一个错误链接,让其返回404页面 在浏览器访问: 而在其它的客户端软件,比如postman软件: 很显然,在浏览器里访问才会返回页面,而在Postman直接返回json数据了,所以基于此现象,可以跟一下Springboot异常自动配置的原理,本博客基于学习了尚硅谷课程之后,自己动手实践再做的笔录 SpringBoot的异常自动配置类是ErrorMvcAutoConfiguration…
目录 1.ContentNegotiatingViewResolver 2.静态资源 3.自动注册 Converter, GenericConverter, and Formatter beans. 4.支持HttpMessageConverters 5.支持MessageCodesResolver 6.首页支持 7.网站logo设置 8.ConfigurableWebBindingInitializer 初始绑定器 源码学习系列之WebMvc自动配置原理笔记 @ web的自动配置在Spring…
目录 1.spring.messages.cache-duration 2.LocaleResolver 的方法名必须为localeResolver 3.默认LocaleResolver 4.指定默认的locale 5.localeChangeInterceptor指定传参 @ MessageSourceAutoConfiguration是国际化语言i18n的自动配置类 MessageSourceAutoConfiguration.ResourceBundleCondition 源码: prot…
然后,为什么@PropertySource注解默认不支持?可以简单跟一下源码 @PropertySource源码: 根据注释,默认使用DefaultPropertySourceFactory类作为资源文件加载类 里面还是调用Spring框架底层的PropertiesLoaderUtils工具类进行读取的 PropertiesLoaderUtils.loadProperties 从源码可以看出也是支持xml文件读取的,能支持reader就获取reader对象,否则出件inputStream loa…
                                         JDK源码学习系列05----LinkedList 1.LinkedList简介 LinkedList是基于双向链表实现的,它也可以被当作堆栈.队列或双端队列进行操作. public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, jav…
                                                                         JDK源码学习系列04----ArrayList 1.ArrayList简介 ArrayList是基于Object[] 数组的,也就是我们常说的动态数组.它能很方便的实现数组的增加删除等操作. public class ArrayList<E> extends AbstractList<E> implements List<E>…
源码学习系列之SpringBoot自动配置源码学习(篇一) ok,本博客尝试跟一下Springboot的自动配置源码,做一下笔记记录,自动配置是Springboot的一个很关键的特性,也容易被忽略的属性,因为这个属性被包括在@SpringBootApplication注解里,所以不去跟一下源码都不知道还有这个属性,ps:本博客源码基于SpringBoot1.5.7版本 @SpringBootApplication ok,跟一下@SpringBootApplication,发现@SpringBoo…
源码学习系列之SpringBoot自动配置(篇二)之HttpEncodingAutoConfiguration 源码分析 继上一篇博客源码学习系列之SpringBoot自动配置(篇一)之后,本博客继续跟一下SpringBoot的自动配置源码 ok,先复习一下上一篇的内容,从前面的学习,我们知道了SpringBoot的自动配置主要是由一个选择器AutoConfigurationImportSelector,先通过选择器将自动配置的类加载到Spring容器 注意点: List configurati…
目录 本篇要点 什么是阻塞队列 阻塞队列提供的方法 阻塞队列的七种实现 TransferQueue和BlockingQueue的区别 1.ArrayBlockingQueue 2.LinkedBlockingQueue 3.PriorityBlockingQueue 4.DelayQueue 5.SynchronousQueue 6.LinkedTransferQueue 7.LinkedBlockingDeque 阻塞队列的实现机制 put方法 take方法 参考阅读 系列传送门: Java并…
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的SpringBoot源码解析系列文章的汇总,当你使用SpringBoot不仅仅满足于基本使用时.或者出去面试被面试官虐了时.或者说想要深入了解一下这个东西时,那么这篇文章绝对能够满足你 SpringBoot自动装配原理解析 本篇文章是当你想要深入学习SpringBoot时最应该读的一篇文章,它包含了SpringBoot的精髓:约定大于配置这句话的原理及实现方式,除了自动装配的原理之外还包含了一个自定义Star的小惊喜 SpringBoot源码…
目录 ThreadPoolExecutor概述 线程池解决的优点 线程池处理流程 创建线程池 重要常量及字段 线程池的五种状态及转换 ThreadPoolExecutor构造参数及参数意义 Work类 void execute(Runnable command) boolean addWorker(firstTask, core) final void runWorker(Worker w) Runnable getTask() void processWorkerExit(w, complet…
date: 2018-8-01 14:22:17title: swoft| 源码解读系列二: 启动阶段, swoft 都干了些啥?description: 阅读 sowft 框架源码, 了解 sowft 启动阶段的那些事儿 小伙伴刚接触 swoft 的时候会感觉 压力有点大, 更直观的说法是 难. 开发组是不赞成 难 这个说法的, swoft 的代码都是 php 实现的, 而 php 又是 世界上最好的语言, swoft 的代码阅读起来是很轻松的. 之后开发组会用 系列源码 解读文章, 深入解析…
目录 Java小白的源码学习系列:HashMap 官方文档解读 基本数据结构 基本源码解读 基本成员变量 构造器 巧妙的tableSizeFor put方法 巧妙的hash方法 JDK1.8的putVal方法 JDK1.8的resize方法 初始化部分 数组搬移部分 Java小白的源码学习系列:HashMap 春节拜年取消,在家花了好多天时间啃一啃HashMap的源码,同样是找了很多很多的资料,有JDK1.7的,也有JDK1.8的,当然本文基于JDK1.8.将所学到的东西进行整理,希望回过头再看…
前言 今天研究ServerBootstrap的bind方法,该方法可以说是netty的重中之重.核心中的核心.前两节的NioEventLoopGroup和ServerBootstrap的初始化就是为bind做准备.照例粘贴一下这个三朝元老的demo,开始本文内容. public class NettyDemo1 { // netty服务端的一般性写法 public static void main(String[] args) { EventLoopGroup boss = new NioEve…
Spring5.0源码学习系列之浅谈BeanFactory创建过程 系列文章目录 提示:Spring源码学习专栏链接 @ 目录 系列文章目录 博客前言介绍 一.获取BeanFactory主流程 二.refreshBeanFactory创建过程 知识点归纳 博客前言介绍 提示:在上一章的学习中,我们简单了解了Spring IoC容器启动初始化的主流程,不过并没有详细解释,因为代码比较复杂,没有做长篇大论,所以本文接着学习BenFactory的创建过程,学习源码建议带着疑问去学,一点点跟,时间积累之…
目录 基本用法介绍 继承体系 构造方法 state状态表示 获取锁 void lock()方法 NonfairSync FairSync 公平与非公平策略的差异 void lockInterruptibly() boolean tryLock()方法 boolean tryLock(long timeout, TimeUnit unit) 释放锁 void unlock()方法 Condition实现生产者消费者 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueu…
目录 Condition接口 AQS条件变量的支持之ConditionObject内部类 回顾AQS中的Node void await() 添加到条件队列 Node addConditionWaiter() void unlinkCancelledWaiters() 完全释放独占锁 int fullyRelease(Node node) 等待进入阻塞队列 boolean isOnSyncQueue(Node node) boolean findNodeFromTail(Node node) vo…
目录 ArrayBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e) 阻塞式插入 E poll(timeout, unit) 阻塞式超时获取 boolean offer(e, timeout, unit) 阻塞式超时插入 其他常规操作 boolean offer(E e) E poll() Boolean remove(Object o) 总结 参考阅读 系列传送门…
目录 LinkedBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e) 阻塞式插入 E poll(timeout, unit) 阻塞式超时获取 boolean offer(e, timeout, unit) 阻塞式超时插入 其他常规操作 boolean offer(E e) E poll() E peek() Boolean remove(Object o) 总结…
目录 PriorityBlockingQueue概述 类图结构及重要字段 什么是二叉堆 堆的基本操作 向上调整void up(int u) 向下调整void down(int u) 构造器 扩容方法tryGrow 源码中向上调整和向下调整实现 siftUpComparable siftDownComparable heapify建堆or堆化 put非阻塞式插入 take阻塞式获取 remove移除指定元素 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSy…
目录 DelayQueue概述 类图及重要字段 Delayed接口 Delayed元素案例 构造器 put take first = null 有什么用 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与释放 Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别 Java并发包源码学习系列:ReentrantLock可重入独占锁详解 Java并发包源码学习系列:…
目录 SynchronousQueue概述 使用案例 类图结构 put与take方法 void put(E e) E take() Transfer 公平模式TransferQueue QNode transfer awaitFulfill tryCancel clean TransferQueue总结 非公平模式TransferStack SNode transfer TransferStack总结 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSync…
目录 LinkedTransferQueue概述 TransferQueue 类图结构及重要字段 Node节点 前置:xfer方法的定义 队列操作三大类 插入元素put.add.offer 获取元素take.poll transfer.tryTransfer xfer三大流程 xfer tryAppend awaitMatch LinkedTransferQueue使用案例 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并…
目录 LinkedBlockingDeque概述 类图结构及重要字段 linkFirst linkLast unlinkFirst unlinkLast unlink 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与释放 Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别 Java并发包源码学习系列:ReentrantLock可重入独占锁详解 Java并发包…
目录 非阻塞并发队列ConcurrentLinkedQueue概述 结构组成 基本不变式 head的不变式与可变式 tail的不变式与可变式 offer操作 源码解析 图解offer操作 JDK1.6 hops设计意图 poll操作 源码解析 图解poll操作 总结 参考阅读 非阻塞并发队列ConcurrentLinkedQueue概述 我们之前花了很多时间了解学习BlockingQueue阻塞队列接口下的各种实现,也大概对阻塞队列的实现机制有了一定的了解:阻塞 + 队列嘛. 而且其中绝大部分是…
目录 ScheduledThreadPoolExecutor概述 类图结构 ScheduledExecutorService ScheduledFutureTask FutureTask schedule void delayedExecute(task) boolean canRunInCurrentRunState(periodic) void ensurePrestart() ScheduledFutureTask#run() FutureTask#run() FutureTask#set…
                     JDK源码学习系列03----StringBuffer+StringBuilder 由于前面学习了StringBuffer和StringBuilder的父类AbstractStringBuilder,他们俩的很多方法都是直接super了父类的,也为了较好的比较StringBuffer和StringBuilder,所以把二者放在同一博文中. 一.StringBuffer 1.静态类,不能被继承,实现了Serializable和CharSequence接口.…
 JDK源码学习系列02----AbstractStringBuilder 因为看StringBuffer 和 StringBuilder 的源码时发现两者都继承了AbstractStringBuilder,并且很多方法都是直接super的父类AbstractStringBuilder的方法,所以还是决定先看AbstractStringBuilder的源码,然后再看StringBuffer 和 StringBuilder. 1.成员变量 AbstractStringBuilder和String一…