package com.microservice.framework; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MySpringAplication { public void run(String[] args) { Spri…
package com.microservice.framework; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MySpringAplication { public void run(String[] args) { Spri…
1 package com.microservice.framework; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6 @SpringBootApplication 7 public class MySpringAplication { 8 9 public void run(Str…
public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); //设置计时器 stopWatch.start(); //记录当前时间 ConfigurableApplicationContext context = null; configureHeadlessProperty(); //设置java.awt.headless为true或false Spring…
上篇文章SpringBoot自动装配原理解析中,我们分析了SpringBoot的自动装配原理以及@SpringBootApplication注解的原理,本篇文章则继续基于上篇文章中的main方法来分析SpringApplication这个类 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplicat…
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的SpringBoot源码解析系列文章的汇总,当你使用SpringBoot不仅仅满足于基本使用时.或者出去面试被面试官虐了时.或者说想要深入了解一下这个东西时,那么这篇文章绝对能够满足你 SpringBoot自动装配原理解析 本篇文章是当你想要深入学习SpringBoot时最应该读的一篇文章,它包含了SpringBoot的精髓:约定大于配置这句话的原理及实现方式,除了自动装配的原理之外还包含了一个自定义Star的小惊喜 SpringBoot源码…
一.简介 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.框架 我们先把springboot源码的框架了解清楚. 1.新建一个springboot项目 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconf…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.项目类型 这一节我们先讨论一下springboot项目的怎么自动加载applicationcontext实现类的. 以前的spring的项目,都是xml加载bean,常用的都是XmlWebApplicationContext实现类 后来出现注解的形式,基本用Annotatio…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.Runner 假如我们想在springboot项目启动完成之后,做点什么,我们应该怎么办呢? 注意我们可以写在bean的初始化方法里面(我们后面讲),但是我们要用到其它已经加载了的bean的能力,又怎么办呢? 当然加顺序,加依赖也能解决,就是麻烦 这一节我们讨论一下sprin…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.Initializer 上一节我们介绍了Runner,它是在项目加载完成之后执行的 有后就有前,有没有在项目加载之前执行的呢? 我们今天介绍的ApplicationContextInitializer就是在spring的bean加载之前执行的 public interface…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.ApplicationContextAware 假设我们想使用某个bean, 如果是在@Component类下面,直接用@Autowired引用就行了 假设我们想在某个静态方法里面用,就不能用上面的方法了 你可能想用new Bean()的方式,new一个,但是这个bean里面…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.web服务器 以前的的spring项目或者springmvc项目都需要一个web服务器,tomcat,或者其它的 使用springboot之后,我们不再需要配置web服务器,因为springboot帮我们集成了 今天我们来分析一下源码,看看在哪里实现的,知其然知其所以然 三.…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.何为自动装配? 我们想用redis,直接引入spring-boot-starter-data-redis的依赖,配置加上就能用. 我们想用mongodb, 直接引入mongodb的依赖 我们想用缓存,直接引入cache的依赖 我们在:springboot源码解析-管中窥豹系列…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.BeanFactoryPostProcessor BeanFactoryPostProcessor是在bean初始化之前对bean的统一操作 package org.springframework.beans.factory.config; import org.spring…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.beanDefinition如何加载 我们之前介绍了beanDefinition的结构: springboot源码解析-管中窥豹系列之BeanDefinition(八) 我们之前也介绍了BeanPostProcessor和BeanFactoryPostProcessor 我们…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.BeanPostProcessor BeanPostProcessor和BeanFactoryPostProcessor比,少了一个factory BeanPostProcessor作用的是bean, BeanFactoryPostProcessor作用的beanfacotr…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.bean如何生成? 我们之前介绍了beanDefinition的结构: springboot源码解析-管中窥豹系列之BeanDefinition(八) 我们之前也介绍了BeanPostProcessor和BeanFactoryPostProcessor 我们也介绍了自动装配,…
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 笔者阅读了园友艾伦 Aaron的系列博客<jQuery源码分析系列>,跑艾伦的部分代码后,感觉仍然不够解渴,对jQuery依旧一知半解,产生了很多问题.阅读源码博客已经无法解决这些问题,所以笔者决定亲自查看jQuery源码,解除心中的疑问.阅读的形式属于自问自答,笔者会提出疑问,然后亲自解答(吐槽:感觉有点像一休哥和将军大人>_<)…
在文章 [spring-boot 源码解析]spring-boot 依赖管理 中,我梳理了 spring-boot-build.spring-boot-parent.spring-boot-dependencies.spring-boot-starter-parent 依赖之间的关系,以及我们平常应该怎么用,这次奉上一张梳理图. 公众号:逸飞兮(专注于 Java 领域知识的深入学习,从源码到原理,系统有序的学习)…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.排序 前几节我们讲源码的时候,会遇到一些排序的问题,我们都避而不谈 比如获取initializer时的排序: private <T> Collection<T> getSpringFactoriesInstances(Class<T> type, C…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.BeanDefinition spring帮我们管理bean,就是通过BeanDefinition实现的,要深研源码,就绕不开BeanDefinition 我们通过源码来看看BeanDefinition到底做了什么 三.源码分析 我们先看看这个类:BeanDefinition…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.列表 springboot源码解析-管中窥豹系列之总体结构(一) springboot源码解析-管中窥豹系列之项目类型(二) springboot源码解析-管中窥豹系列之Runner(三) springboot源码解析-管中窥豹系列之Initializer(四) spring…
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot源码管中窥豹系列. 二.EnableXXX 我们上一节讲了自动装配,用到了@SpringBootApplication里面的@EnableAutoConfiguration springboot还封装了其它的EnableXXX注解 比如我们想开启定时任务,要加上注解:@EnableSchedulin…
本篇我们在SpringBoot中整合Mybatis这个orm框架,毕竟分析一下其自动配置的源码,我们先来回顾一下以前Spring中是如何整合Mybatis的,大家可以看看我这篇文章Mybaits 源码解析 (十)----- Spring-Mybatis框架使用与源码解析 Spring-Mybatis使用 添加maven依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spri…
public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); //设置计时器 stopWatch.start(); //记录当前时间 ConfigurableApplicationContext context = null; configureHeadlessProperty(); //设置java.awt.headless为true或false Spring…
本文从源代码的角度来看看Spring Boot的启动过程到底是怎么样的,为何以往纷繁复杂的配置到如今可以这么简便. 入口类 @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { SpringApplication.run(HelloWorldMainApplication.class, args); } } @SpringBootApplic…
关键词:spring-boot 依赖管理.spring-boot-dependencies.spring-boot-parent 问题 maven 工程,依赖管理是非常基本又非常重要的功能,现在的工程越来越庞大,依赖越来越多,各种二方包.三方包太多太多,依赖冲突处理起来真是让人头疼,经常需要涉及到多个地方需要调整. 微信公众号:逸飞兮(专注于java知识领域的源码分析,从源码中理解框架/工具原理.验证CS专业知识) 解决方案 使用统一的依赖管理模块来管理工程中的所有依赖. spring-boot…
在我们用 springboot 搭建项目的时候,有时候会碰到在项目启动时初始化一些操作的需求 ,针对这种需求 spring boot为我们提供了以下几种方案供我们选择: ApplicationRunner 与 CommandLineRunner 接口 Spring容器初始化时InitializingBean接口和@PostConstruct Spring的事件机制 ApplicationRunner与CommandLineRunner 我们可以实现 ApplicationRunner 或 Com…
在上一篇博客中分析了springBoot启动流程,大体的轮廓只是冰山一角.今天就来看一下springBoot的亮点功能:自动化装配功能. 先从@SpringBootApplication开始.在启动流程章节中,我们讲述了SpringBoot2大致的启动步骤,并进行了源码详解.但是在刷新容器这块并未展开,refreshContext(context);简单的一行代码,背后却做了太多事情.所以为了不喧宾夺主,本篇也尽量选取和注解@SpringBootApplication有关的方法讲解. sprin…
本篇来讲一下SpringBoot是怎么自动开启事务的,我们先来回顾一下以前SSM中是如何使用事务的 SSM使用事务 导入JDBC依赖包 众所周知,凡是需要跟数据库打交道的,基本上都要添加jdbc的依赖,在Spring项目中,加入的是spring-jdbc依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </…