带着萌新看springboot源码】的更多相关文章

上一节说到实例化了所有的单实例Bean,后面还有一步遍历 12.完成容器刷新(finishRefresh();) 那个和生命周期有关的后置处理器类型是LifecycleProcessor:监听器原理我就不多说了吧(大概原理参考我写的“知识小罐头”)..... 到此为止,ioc容器的源码我就粗略的走了一遍.还是那句话,我这是很简单很粗糙的走了一遍,其中有很多的原理都没有说,要想真的弄懂,我这个只能当个大概的思路,还需要自己去找找其他大牛的教程,试试走走源码,会有意想不到的收获. 下一节估计又要回到…
上一节走了一遍从浏览器发出请求到得到向页面的流程,基本的功能是已经实现了.但是现在啊,我想自定义一个拦截器(拦截器可以做用户登录验证,如果登录了,就让你通过,如果没有登录,就重定向登录页面),这里就不复杂了,简单实现以下原理,除了不拦截“/hello”请求,其他请求我都拦截并跳转到index.html. 1.了解springboot的配置类格式 springboot的配置类最常见的就是在类上面标注@Configuration,表示这是一个配置类(就是以前的xml): 第一种:在配置类的里面就有很…
emmm.....这次先不说springboot原理,先好好回顾一下以前的注解版spring原理,先把spring原理了解清晰了,再看springboot原理更容易. 要说起spring,最重要的就是创建ioc容器的全过程,也可以叫做生命周期. 所谓的ioc容器就是实现类:我们常看到的,有一个最顶层的BeanFactory接口,还有一个子接口ApplicationContext,其实现类都可说是ioc容器(称呼很笼统),只是ApplicationContext功能更强大,而且可以通过配置文件来实…
上一节讲到了快速新建一个springboot应用,以及springboot的自动配置类起作用的时机,并且一起看了一个自动配置类的源码. 这一节我们来粗略看看当用户在浏览器输入一个url,怎么样返回一个静态HTML和动态网页,以及其中的原理. 在此之前说一点,springboot不支持jsp,也就是说以前我们写的jsp页面页面在这里解析不了,换句话说,springboot肯定有一个自己独有的类似jsp的技术来实现动态网页的访问,这点毫无疑问,不然一个网站只能访问html网页,太单调了. sprin…
先继续接上一篇,那个启动原理还有一点没说完. 6. afterRefresh(context, applicationArguments); 看这个名字就知道,应该就是ioc容器刷新之后的一些操作了,我们来看看内部是怎么做的 可以看看callRunner方法,其实就是执行这个xxxRunner里面的run方法 下面我说说这两个ApplicationRunner和CommandLineRunner是个什么东西,emmm..本来我也不知道,但是查了好半天的资料.博客,知道了一点,说实话,这两个东西功…
通过前面这么多讲解,springboot原理应该也大概有个轮廓了,一些基本的配置,从客户端url到controller(配置一些要用的组件,servlet三大组件,处理器映射器,拦截器,视图解析器这些都说过了),然后通过Dao和数据库打交道(配置数据源.Druid监控都说了,其实我后面要写的就是springboot和mybatis.springdata jpa的整合运用了),顺便还说了一下spring中ioc容器的创建原理. 今天就来一点更好玩的东西,大家还记得最开始的那个主配置类吧(就是有ma…
上一节把springboot和jdbcTemplate大概用法说了一下,以及大概看了一下源码,还说了加载sql文件时的原理. 这一节来看看自动注入JdbcTemplate的原理,顺便用一用Druid数据源(功能比较强大,可以想象成一个监督设备,可以监控很多东西) 话说,sql文件要放在类路径下,建表sql(schema-all.sql或者schema.sql),插入数据的sql(data-all.sql或者data.sql),那能不能自定义名字呢? 1.自定义sql文件名称 在yml文件里面,指…
emmm.....常规开局,继续说一下废话,前面简单的说了一下spring的ioc容器创建原理(花了不少时间去看了别人的博客+查了不少资料+自己的理解),相信大家对ioc容器有了一个初步的认识了. springboot学了这么久了,也该和数据库打打交道了.大家还记不记得,以前最初用spring和数据库打交道的一个东西,JdbcTemplate(就是对jdbc做了一个简单的封装,忘记了的小伙伴去看看别人的博客回顾一下),今天就用springboot如何使用JdbcTemplate和数据库交互以及基…
继续开头说些废话,我也不知道什么鬼,每次写着写着经常会写到其他地方去了,太容易分神了. 这次说一下springboot对于springmvc的大概整个流程,以请求动态网页为例 . 1.梳理一下springmvc的大概流程 首先是客户端(浏览器)发送请求到前端控制器(dispatcherServlet)-------------->前端控制器就会去调用处理器映射器(HandlerMapping),去寻找真正的Handler(其实就是controller),返回执行器链(HandlerExecuti…
继续接着上一节,到了第六步(温馨提醒,内容有点小多,不过看完ioc原理就差不多了) 6.注册Bean后置处理器(registerBeanPostProcessors(beanFactory)) 最后一步,添加一个后置处理器,打开这个后置处理器 7.initMessageSource();(主要是做国际化功能,消息绑定,emmm...不怎么了解这个) 大概的意思就是先判断容器里有没有一个id=messageSource,类型为MessageSource的组件(用于解析国际化的配置文件),有的话直接…
这节来说个大家都比较熟悉的东西,就是servlet三大组件,servlet.filter.listener,再说说springboot的内置tomcat. 也许还会说一下tomcat的运行原理,还有,springboot不是不支持jsp吗(是因为嵌入式tomcat的原因),那我就让springboot支持jsp,其他的还是一样. 比较长,可能要分为两节. 1.servlet配置 想必大家不会陌生servlet配置,写个类继承HttpServlet,然后在原来的web.xml文件中配置<servl…
上一节讲到先创建maven项目,然后导入依赖,主配置类等步骤,现在来个快速创建一个springboot模板,不需要向上节那么繁琐. 1.快速创建springboot应用 IDEA---->file---->new---->project---->Spring Initializer 注意jdk版本,然后就是下一步 点击Next 后面一直点Next就ok了,很容易,很快就创建了一个springboot应用了,再写个controller,后面跟上一节一样.不赘述了. 2.认识@Conf…
springboot的最强大的就是那些xxxAutoconfiguration,但是这些xxxAutoConfiguration又依赖那些starter,只有导入了这些场景启动器(starter),我们很多自动配置类才能有用,并且还会新增一些功能, 这次就来一起写个简单的starter,来看看内部到底是什么原理! 脑中大概有个印象:我们要用一个场景(比如web),直接导入下图所示的依赖,但是在jar包里面去看这个,你会发现里面只有一些基本的配置文件,什么类都没有,就能够想到这个一类就类似一个公司…
[修改]很长时间没看这个,有点弄混淆了.bean后置处理器(BeanPostProcessor)应该是在bean创建实例并且赋值好了之后,调用初始化方法(相当于xml配置中<bean init=“初始化方法”>)的前后会调用后置处理器的那两个方法. 上一节在springboot中配置了servlet三大组件以及嵌入式servlet容器,并且还简单的说了如何切换不同的容器. 这一节就来说说如何改变servlet容器的配置参数,一般有两种常见的方式,第一种:配置文件(properties和yml)…
springboot的功能确实强悍,只需要很少的配置,就能够做出来一个简单的web应用,下面我就简要的分析一下为什么springboot能够起作用. 不觉得很奇怪吗?只需要一个主配置类(就是启动那个main方法),就能够启动一系列的springboot功能. 1.首先看主配置类 2.打开@SpringBootApplication这个注解 这个类除了那个注解,一个run方法,其他的就和平常我们所写的类一样,这里就暂时先介绍这个注解.@SpringBootApplication注解,见名知意,标注…
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一). 前面搭建好了自己本地的SpringBoot源码调试环境后,此时我们不要急着下手进入到具体的源码调试细节中,刚开始阅读源码,此时我们一定要对项目结构等有一个整体的认识,然后再进行源码分析调试.推荐阅读下笔者之前写的的分析开源项目源码,我们该如何入手分析?一文,干货满满哦. 2 SpringBoot源码模块一览 我们先来对Sp…
本章开始来学习下Spring的源码,看看Spring框架最核心.最常用的功能是怎么实现的. 网上介绍Spring,说源码的文章,大多数都是生搬硬推,都是直接看来的观点换个描述就放出来.这并不能说有问题,但没有从一个很好的.容易切入的角度去了解学习.博主来尝试抛弃一些所知,从使用上入手,步步回溯源码去了解学习. 很多人会混乱IOC和DI的两个概念,其实这两者是层面的不同. 具体的区别的区别:IOC是DI的原理.依赖注入是向某个类或方法注入一个值,其中所用到的原理就是控制反转. 所以说到操作层面的时…
前言 作为前端状态管理器,这个比较跨时代的工具库redux有很多实现和思想值得我们思考.在深入源码之前,我们可以相关注下一些常见问题,这样带着问题去看实现,也能更加清晰的了解. 常见问题 大概看了下主要有这么几个: redux三大原则 这个可以直接参考官方文档 redux 的优缺点. 关于优缺点,太主观了大家见仁见智. redux中间件相关,洋葱模型是什么,常见中间件. 背景 有关acton,reducer相关的部分可以看我前面的文章.我们主要关注针对store和中间件相关的部分来解读. sto…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.Initializer 上一节我们介绍了Runner,它是在项目加载完成之后执行的 有后就有前,有没有在项目加载之前执行的呢? 我们今天介绍的ApplicationContextInitializer就是在spring的bean加载之前执行的 public interface…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.beanDefinition如何加载 我们之前介绍了beanDefinition的结构: springboot源码解析-管中窥豹系列之BeanDefinition(八) 我们之前也介绍了BeanPostProcessor和BeanFactoryPostProcessor 我们…
一点一点看JDK源码(三)java.util.ArrayList liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 ArrayList是一个容量不固定的容器,为单列,有序集合,容量可扩容,扩容系数为1.5 有最大值,一般达不到. ArrayList是线程不安全的,其扩容发生于集合修改的时候,如add,addAll等 ArrayList底层使用的是Object数组,初始化内容为10个容量的元素 使用ArrayList的时候,几种…
一点一点看JDK源码(四)java.util.ArrayList 中篇 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 在前篇中,对于java.util.ArrayList进行了一些源码注释,能坚持看完的估计都是神一般的存在. 不过看源码并需要一个艰苦的过程,枯燥是很正常的. 但是不是要一直都很枯燥,本文将对此类进行分类解析. 2.关注点 2.0.ArrayList是如何构成的? 在java中,一个类的构成并不是十分复杂,列…
前提 人工智能.大数据快速发展的今天,对于 TB 甚至 PB 级大数据的快速检索已然成为刚需,大型企业早已淹没在系统生成的浩瀚数据流当中.大数据技术业已集中在如何存储和处理这些海量的数据上.Elasticsearch 作为开源领域的后起之秀,从2010年至今得到飞跃式的发展. Elasticsearch 以其开源.分布式.RESTFul API 三大优势,已经成为当下风口中"会飞的猪". 在我的电脑本地写了几篇 ElasticSearch 的源码解析了,回过头来想想应该也写一篇为何我会…
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 助力SpringBoot自动配置的条件注解ConditionalOnXXX分析--SpringBoot源码(三) 温故而知新,我们来简单回顾一下上篇的内容,上一篇我们分析了SpringBoot的条件注解@ConditionalOnXxx的相关源码,现挑重点总结如下: SpringBoot的所有@ConditionalOnXxx的条件类OnXxxCondition都是继承于SpringBootConditio…
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何分析SpringBoot源码模块及结构?--SpringBoot源码(二) 上一篇分析了SpringBoot源码结构及各个模块pom之间的关系后,那么此篇开始就开始解开SpringBoot新特性之一--自动配置的神秘面纱了.因为SpringBoot自动配置原理是基于其大量的条件注解ConditionalOnXXX,因此,本节我们先来撸下Spring的条件注解的相关源码. 2 SpringBoot的派生条…
一.简介 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.框架 我们先把springboot源码的框架了解清楚. 1.新建一个springboot项目 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconf…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.排序 前几节我们讲源码的时候,会遇到一些排序的问题,我们都避而不谈 比如获取initializer时的排序: private <T> Collection<T> getSpringFactoriesInstances(Class<T> type, C…
springboot源码从main函数开始 public static void main(String[] args) { ApplicationContext app = SpringApplication.run(BeikbankApplication.class, args); } 进入run方法,再持续进入到实际操作的步骤 public static ConfigurableApplicationContext run(Object source, String... args) {…
SpringBoot源码分析之SpringBoot的启动过程 发表于 2017-04-30   |   分类于 springboot  |   0 Comments  |   阅读次数 SpringBoot的启动很简单,代码如下: 1 2 3 4 5 6 @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyAppli…
一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表,列表,目录,名单,有种index的意味在里头 编程语言中的List是强调线性,可以简单的视为一个双向串行的集合 List的特色是在结婚的任何位置增加或 删除元素都比较快,本身并不只是随机存取. 同时,List是众多语言中都提供的常用类库之一. java.util.List是一个接口,该接口继承了Co…