1. Spring Boot 魔法的核心:自动配置、起步依赖、命令行界面、Actuator
  2. 自动配置:
    1. 不用手动配置JdbcTemplate的Bean
    2. 不用手动配置DataSource的Bean
    3. Spring Boot 为常见应用场景进行自动配置。
      1. 如果Spring Boot 在Classpath中发现了H2数据库,那么它就自动配置一个H2嵌入式数据库
      2. 如果在Classpath中发现了JdbcTemplate,那么它就会为你配置一个JdbcTempalte的Bean
      3. 自动配置还包括 Java持久化API(Java Persistence API,JPA)、Thymeleaf模板、安全和Spring MVC
    4. 简而言之,SpringBoot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。
    5. 举几个例子,下面这些情况都是SpringBoot的自动配置要考虑的。
      1. Spring的JdbcTemplate是不是在Classpath里?如果是,并且有DataSource的Bean,则自动配置一个JdbcTemplate的Bean。  Thymeleaf是不是在Classpath里?如果是,则配置Thymeleaf的模板解析器、视图解析器以及模板引擎。

        Spring Security是不是在Classpath里?如果是,则进行一个非常基本的Web安全设置。

        每当应用程序启动的时候,SpringBoot的自动配置都要做将近200个这样的决定,涵盖安全、集成、持久化、Web开发等诸多方面。所有这些自动配置就是为了尽量不让你自己写配置。

    6. 所有这些配置如此与众不同,原因在于它们利用了Spring的条件化配置,这是Spring 4.0引入的新特性。条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。
  3. 起步依赖
    1. 起步依赖其实就是特殊的Maven依赖或Gradle依赖
    2. 把常用库聚合在一起,组成几个特定功能而定制的依赖
    3. 起步依赖把你从“需要哪些库的哪些版本”中解脱出来,且不用担心库之间的兼容性
    4. 起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM)
    5. 不需要指定版本号,起步依赖本身的版本是由正在使用的Spring Boot的版本来决定的,而起步依赖则会决定它们引入的传递依赖的版本。
    6. 显示依赖树:mvn dependency:tree
    7. 起步依赖和你项目里的其他依赖没什么区别。也就是说,你可以通过构建工具中的功能,选择性地覆盖它们引入的传递依赖的版本号,排除传递依赖,当然还可以为那些Spring Boot起步依赖新增没有涵盖的库指定依赖。
      1. 示例:排除
        1. <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <exclusions>
          <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          </exclusion>
          </exclusions>
          </dependency>
      2. 示例:覆盖
        1. <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.4.</version>
          </dependency>
          Maven总是会用最近的依赖,也就是说,你在项目的构建说明文件里增加的这个依赖,会覆盖传递依赖引入的另一个依赖。
  4. 命令行界面
    1. Spring Boot CLI是Spring Boot的非必要组成部分。虽然它为Spring带来了惊人的力量,大大简化了开发,但也引入了一套不太常规的开发模型。要是这种开发模型与你的口味相去甚远,那也没关系,抛开CLI,你还是可以利用Spring Boot提供的其他东西。
  5. Actuator
    1. Actuator
      则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就能窥探应用程序的内部情况了,包括如下细节:\
      1. Spring应用程序上下文里配置的Bean
      2. Spring Boot的自动配置做的决策
      3. 应用程序取到的环境变量、系统属性、配置属性和命令行参数
      4. 应用程序里线程的当前状态
      5. 应用程序最近处理过的HTTP请求的追踪情况
      6. 各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标
    2. Actuator通过Web端点和shell界面向外界提供信息。如果要借助shell

Spring Boot 梳理 - 4个核心的更多相关文章

  1. spring boot编程思想(核心篇) pdf 下载 it教程

    资料简介:本书是<Spring Boot 编程思想>的核心篇,开篇总览Spring Boot核心特性,接着讨论自动装配(Auto-Configuration)与SpringApplicat ...

  2. Spring Boot 的 10 个核心模块

    学习 Spring Boot 必须得了解它的核心模块,和 Spring 框架一样,Spring Boot 也是一个庞大的项目,也是由许多核心子模块组成的. 你所需具备的基础 告诉你,Spring Bo ...

  3. Spring boot 梳理 - WebMvcConfigurer接口 使用案例

    转:https://yq.aliyun.com/articles/617307 SpringBoot 确实为我们做了很多事情, 但有时候我们想要自己定义一些Handler,Interceptor,Vi ...

  4. Spring boot 梳理 - @Conditional

    @Conditional(TestCondition.class) 这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置. spring框架还 ...

  5. Spring boot 梳理 -@SpringBootApplication、@EnableAutoConfiguration与(@EnableWebMVC、WebMvcConfigurationSupport,WebMvcConfigurer和WebMvcConfigurationAdapter)

    @EnableWebMvc=继承DelegatingWebMvcConfiguration=继承WebMvcConfigurationSupport 直接看源码,@EnableWebMvc实际上引入一 ...

  6. Spring boot 梳理 - 模版引擎 -freemarker

    开发环境中关闭缓存 spring: thymeleaf: cache: false freemarker: cache: false Spring boot 集成 freemarker <dep ...

  7. Spring boot 梳理 - Spring boot 与 JSP

    若使用Spring boot 开发web应用中使用jsp,需要打包成war,并部署到非嵌入式servlet容器中运行,在嵌入式servlet中无法运行,且需要匹配非嵌入式servlet版本与Sprin ...

  8. Spring boot 梳理 - SpringApplication

    简单启动方式 public static void main(String[] args) { SpringApplication.run(MySpringConfiguration.class, a ...

  9. Spring boot 梳理 - Spring boot自动注册DispatcherServlet

    spring boot提供的DispatcherServlet的name就是“dispatcherServlet”. 源码 public ServletRegistrationBean dispatc ...

随机推荐

  1. 在 Web 级集群中动态调整 Pod 资源限制

    作者阿里云容器平台技术专家 王程阿里云容器平台技术专家 张晓宇(衷源) ## 引子 不知道大家有没有过这样的经历,当我们拥有了一套 Kubernetes 集群,然后开始部署应用的时候,我们应该给容器分 ...

  2. 《Java 8 in Action》Chapter 9:默认方法

    传统上,Java程序的接口是将相关方法按照约定组合到一起的方式.实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现. 但是,一旦类库的设计者需要更新接口,向其中加入新的方法, ...

  3. Delphi - Indy TIdMessage和TIdSMTP实现邮件的发送

    idMessage / idSMTP 首先对idMessage类的各种属性进行赋值(邮件的基本信息,如收件人.邮件主题.邮件正文等),其次通过idSMTP连接邮箱服务器,最后通过idSMTP的Send ...

  4. 前端架构师亲述:前端工程师成长之路的 N 问 及 回答

    问题回答者:黄轶,目前就职于 Zoom 公司担任前端架构师,曾就职于滴滴和百度. 1. 前端开发 问题 大佬,能分享下学习路径么,感觉天天忙着开发业务,但是能力好像没有太大提升,不知道该怎么充实自己 ...

  5. ABC133F - Colorful Tree

    ABC133FColorful Tree 题意 给定一颗边有颜色和权值的树,多次询问,每次询问,首先更改颜色为x的边的权值为y,然后输出u到v的距离. 数据都是1e5量级的. 思路 我自己一开始用树链 ...

  6. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 +CDQ分治

    1935: [Shoi2007]Tree 园丁的烦恼 参考与学习:https://www.cnblogs.com/mlystdcall/p/6219421.html 题意 在一个二维平面中有n颗树,有 ...

  7. shell 的while语句

    转 http://blog.chinaunix.net/uid-25880122-id-2901409.html while循环的格式   while expression do command co ...

  8. Node基础-CommonJS模块化规范

    1.在本地项目中基于NPM/YARN安装第三方模块 第一步:在本地项目中创建一个"package.json"的文件 作用:把当前项目所有依赖的第三方模块信息(包含:模块名称以及版本 ...

  9. 【Offer】[65] 【不用加减乘除做加法】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 牛客网刷题地址 思路分析 对数字做运算,除了四则运算外, ...

  10. 【LeetCode】55-跳跃游戏

    题目描述 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: ...