目录

Spring Boot 概述

spring-boot-maven-plugin 插件简化部署

spring-boot-starter-parent 启动器

spring-boot-starter-web 启动器

@SpringBootApplication 启动类

Spring Boot starter 自动配置原理


Spring Boot 概述

1、Spring Boot 用来简化 Spring 应用开发,约定大于配置,去繁从简,just run 就能创建一个独立的,产品级别的应用.

2、产生背景:J2EE 笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。

3、解决方法:Spring Boot 为 J2EE 提供一站式解决方案;Spring Cloud 为分布式提供解决方案

4、Spring Boot 就是整个Spring 技术栈的一个大整合:

Spring Boot官网地址:https://spring.io/projects/spring-boot
Spring Boot 在 GitHub 上的开源地址为:https://github.com/spring-projects/spring-boot
Spring Boot 官方所有开源示例:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples

5、Spring Boot 优点:

1、快速创建独立运行的 Spring 项目以及与主流框架集成
2、使用嵌入式的 Servlet 容器,应用无需打成 WAR 包
3、starters 启动器自动依赖与版本控制
4、大量的自动配置,简化开发,也可修改默认值
5、无需配置 XML,无代码生成,开箱即用
6、生产环境的运行时应用监控
7、与云计算的天然集成

Spring Boot :用于快速开发微服务中的各个功能/小型服务
Spring Cloud :用于将各个功能/小型服务连接起来
Spring Cloud Data Flow :用于处理服务之间的数据

快速构建 Spring Boot 项目方式1:IDEA 中集成了 Spring 初始化器来进行快速构建项目 File -> New Project :

如果 https://start.spring.io/  访问慢,则可以将 https 改成 http 试试。

快速构建 Spring Boot 项目方式2访问 https://start.spring.io/ 官网进行构建 Spring Boot 项目然后下载,最后导入到 IDEA 中。

spring-boot-maven-plugin 插件简化部署

1、Spring Boot 提供了如下插件可以将整个 Spring Boot 应用(即使是普通的 Java Web 应用)打包成一个可执行 Jar 文件,于是以后可以直接双击就能运行,简化了 web 应用部署。

    <build><plugins><!-- spring-boot-maven-plugin插件:可以将应用打包成一个可执行的jar包;--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2、可以运行 "package" 将应用打包到 IDEA 工作目录下,也可以运行 "install" 将应用打包到 Maven 本地仓库下

3、运行方式一:直接双击可执行 jar 包 "helloWorld-1.0-SNAPSHOT.jar" 运行应用程序,此时在任务管理器可以看到 "javaw.exe" 的进程,结束此进程即可关闭应用程序。

4、运行方式二:命令行使用 "java -jar ****.jar" 运行应用程序。此时可以看到应用启动信息,也可以看到应用输出的所有信息,就相当于 Tomcat 的启动小黑窗口,关闭命令行窗口即可关闭应用程序。

5、应用中自己编写的类以及所有依赖的 jar 包全部打包到了下面的 "helloWorld-1.0-SNAPSHOT.jar" 中,其中就包括了集成的Tomcat 服务器

spring-boot-starter-parent 启动器

1、自己的 Spring Boot 项目需要继承 spring-boot-starter-parent 项目,因为 spring-boot-starter-parent 项目继承了 spring‐boot‐dependencies。

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.3.RELEASE</version><relativePath>../../spring-boot-dependencies</relativePath></parent>

2、spring‐boot‐dependencies 真正管理 Spring Boot 应用里面的所有版本依赖关系,它的 pom.xml 文件也是最大的,是 Spring Boot 的版本仲裁中心;

spring-boot-starter-web 启动器

1、spring-boot-starter-web 是 spring-boot 场景启动器(spring-boot-starter)之一,集成了 web 应用开发的常用 API ;

2、Spring Boot 将所有的功能场景都抽取出来,做成一个个starters(启动器),只需要在项目里面引入这些 starter,相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景的启动器。

3、官网 Starters 可以看到所有的启动器,这些 starters 几乎涵盖了 java ee 所有常用场景,Spring Boot 对这些场景依赖的 jar 也做了严格的测试与版本控制。

4、Spring Boot 所有版本的官方文档:https://docs.spring.io/spring-boot/docs/

@SpringBootApplication 启动类

1、@SpringBootApplication:标注在某个类上说明这个类是 SpringBoot 的主配置类,SpringBoot 就会运行这个类的 main 方法来启动 SpringBoot 应用;

2、@SpringBootApplication 注解内容如下所示:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

1、@SpringBootConfiguration:是 Spring Boot 的配置类,标注在某个类上,表示这是一个Spring Boot的配置类;
2、@EnableAutoConfiguration:开启自动配置功能,以前需要手动配置的东西,现在Spring Boot帮我们自动进行配置;
3、@Import:导入所有的自动配置场景
4、@AutoConfigurationPackage:定义默认的包扫描规则,程序启动扫描加载主程序类所在的包以及下面所有子包的组件;
5、EnableAutoConfigurationImportSelector:导入哪些组件的选择器,将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
6、Spring Boot 在启动的时候从类路径下的 META-INF/spring.factories 中获取 EnableAutoConfiguration 指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要手动配置的东西,自动配置类都帮我们配置好,J2EE 的整体整合解决方案和自动配置都在spring-boot-autoconfigure-x.x.x.RELEASE.jar 中;

Spring Boot starter 自动配置原理


1、Spring boot 通过 Spring boot 提供的 starter 大大简化了项目初始搭建以及开发过程。

2、在使用 spring boot 搭建项目时,只需要引入官方提供的 starter,就可以直接使用,免去了各种配置。简单来讲就是引入了一些相关依赖和一些初始化的配置。

3、Spring 官方提供了很多 starter,第三方也可以定义 starter,为了加以区分, starter 从名称上进行了如下约定:

Spring 官方提供的 starter 名称格式: spring-boot-starter-XXX,例如 spring-boot-starter-web.
    第三方提供的 starter 名称格式: XXX-spring-boot-starter,例如 mybatis-spring-boot-starter.
    
4、Spring boot 之所以能够简化项目的搭建和开发过程,主要是基于它提供的起步依赖和自动配置。

5、起步依赖:就是将具备某种功能的坐标打包到一起,同以简化依赖导入的过程。例如导入 spring-boot-starter-web, 则和 web 开发相关的 jar 包都一起导入到项目中了。

6、自动配置:就是无须手动配置 xml,自动配置并管理 bean,可以简化开发过程。


1、Spring Boot 启动的时候加载主配置类(@SpringBootApplication),开启了自动配置功能 @EnableAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

2、将 类路径下 META-INF/spring.factories 里面配置的所有 XxxAutoConfiguration 的值加入到了容器中;

...
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
...

3、每一个这样的 xxxAutoConfiguration 类都是容器中的一个组件,都加入到容器中,用他们来做自动配置。

4、每一个自动配置类进行自动配置功能,以 HttpEncodingAutoConfiguration(Http 编码自动配置)为例解释自动配置原理。

@Configuration //表示这是一个配置类,与以前编写的配置文件一样,也可以给容器中添加组件
@EnableConfigurationProperties({HttpEncodingProperties.class}) //启动指定类的//ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把//HttpEncodingProperties加入到ioc容器中@ConditionalOnWebApplication(type = Type.SERVLET
) //判断当前应用是否是web应用,如果是,当前配置类生效@ConditionalOnClass({CharacterEncodingFilter.class}) //判断当前项目有没有这个类//CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;
@ConditionalOnProperty(prefix = "spring.http.encoding",value = {"enabled"},matchIfMissing = true
)    //判断配置文件中是否存在某个配置 spring.http.encoding.enabled; matchIfMissing = true:如果不存在,判断也是成立的public class HttpEncodingAutoConfiguration {
//他已经和SpringBoot的配置文件映射了
private final HttpEncodingProperties properties;
//只有一个有参构造器的情况下,参数的值就会从容器中拿
public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
this.properties = properties;
}
@Bean //给容器中添加一个组件,这个组件的某些值需要从properties中获取
@ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件?
public CharacterEncodingFilter characterEncodingFilter() {
CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
filter.setEncoding(this.properties.getCharset().name());
filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
return filter;
}

5、根据当前不同的条件判断,决定这个配置类是否生效?一但这个配置类生效,这个配置类就会给容器中添加各种组件,这些组件的属性是从对应的 Xxxproperties 类中获取的,这些类里面的每一个属性又是和配置文件绑定的;所有在配置文件中能配置的属性都是在XxxProperties 类中封装的;配置文件能配置什么就可以参照某个功能对应的这个属性类。

@ConfigurationProperties(prefix = "spring.http.encoding"
) //从配置文件中获取指定的值和bean的属性进行绑定
public class HttpEncodingProperties {public static final Charset DEFAULT_CHARSET;private Charset charset;private Boolean force;private Boolean forceRequest;private Boolean forceResponse;private Map<Locale, Charset> mapping;

Spring Boot 概述、初始化器、spring-boot-maven-plugin 插件简化部署、starter 自动配置原理相关推荐

  1. Spring Boot概述与入门特点配置方式注入方式yim配置文件与多文件配置Spring Boot自动配置原理lombok应用

    1. Spring Boot概述 Spring Boot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 首页Spring Boot简介可以 ...

  2. Spring Boot常见企业开发场景应用、自动配置原理结构分析

    读者应具备: Spring SpringMVC服务器端开发基础 Maven基础 本篇主要介绍Spring Boot在企业开发中常见场景的使用.以及Spring Boot的基本原理结构. 以下为本篇设计 ...

  3. 芋道 Spring Boot 自动配置原理

    转载自  芋道 Spring Boot 自动配置原理 1. 概述 友情提示:因为本文是分享 Spring Boot 自动配置的原理,所以需要胖友有使用过 Spring Boot 的经验.如果还没使用过 ...

  4. springboot自动配置原理_今日份学习之Spring Boot自动配置实现原理

    通过前面章节的学习,我们掌握了使用Spring Boot框架进行实际应用开发的方法.在使用Spring Boot 的过程中,我们时常会为一些看似简单,但实际上蕴藏了强大功能的实现而惊呼,下面就让我们来 ...

  5. Spring Boot 面试杀手锏:自动配置原理

    欢迎关注方志朋的博客,回复"666"获面试宝典 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项.除了某些老旧的政府项目或金融项目持有观望态度外,如 ...

  6. Spring Boot自动配置原理、实战

    Spring Boot自动配置原理 Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射. org.s ...

  7. Spring Boot中自动配置原理以及日志的基本使用

    目录 自动配置原理 日志的基本使用 自动配置原理 自动配置原理: 1. Spring Boot启动时加载主配置类,开启了知道配置功能@EnableAutoConfiguration. 2. @Enab ...

  8. Spring Boot面试必问:自动配置原理

    Spring Boot自动配置原理 在传统的SSM框架集成中,需要编写大量的XML配置文件,比如集成Mybatis时,需要编写mybatis_config.xml文件,在集成springmvc时,需要 ...

  9. 学习第三篇:【SpringBoot-Labs】芋道 Spring Boot 自动配置原理

    本周(8.21-8.27)将学习芋道 Spring Boot的以下文章: 8.21: 快速入门 8.22:Spring Boot 自动配置原理 .Jar 启动原理 8.23:调试环境. 热部署入门.消 ...

  10. Spring Boot 面试杀手锏—自动配置原理

    点击关注公众号,回复"1024"获取2TB学习资源! 引言 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项.除了某些老旧的政府项目或金融项目持有观 ...

最新文章

  1. Jquery获取参数(解决参数中文乱码问题)
  2. java8 大到小排序,屌炸天,JDK8的排序大法!!
  3. Java反射技术概述
  4. apache mediawiki 安装_如何在CentOS 7上安装MediaWiki
  5. 泛型(CSDN转载)
  6. ms sql 带自增列 带外键约束 数据导入导出
  7. matlab jar包,Matlab 將m文件打包成jar包 (二)使用jar包
  8. Elasticsearch-日期类型
  9. 关于ABAP调试中的F5,F6,F7,F8的区别和用法
  10. datax(24):远程调试datax
  11. excel 行列互换 绿色工具(怎么把行变成列,把列变成行)
  12. macos 获取root权限
  13. Proxmox VE 7.2 使用qemu-img转换磁盘格式
  14. html 手指状态,HTML5技术教程 手指按下和手指抬起触发事件
  15. 华为OD机试真题 Java 实现【服务中心选址】【2023 Q1 | 200分】
  16. 【ROS2】【机器人导航navigation2】参数调整分析
  17. JAVA操作properties配置文件
  18. android系统锁屏锁怎么解决方法,忘了图案锁?这是你如何解锁Android模式锁定屏幕!...
  19. 《我要好工作》读书笔记
  20. IITP:截止2017年韩国人工智能专利排名全球第三

热门文章

  1. 拓端tecdat|R语言用有限混合模型(FMM,finite mixture model)创建衰退指标对股市SPY、ETF收益聚类和双坐标图可视化
  2. 拓端tecdat|R语言中的生存分析Survival analysis晚期肺癌患者4例
  3. 拓端tecdat|R语言Bass模型进行销售预测
  4. android碎片按钮,Android 碎片学习 之 如何在碎片调用Activity中的方法来进行赋值操作...
  5. (6)数据结构-共享栈
  6. java ilvmanagerview_创建一个多行的tooltip
  7. opencv成员函数data,step,at的使用
  8. Ubuntu Server 命令行下显示中文乱码(菱形)解决办法
  9. Python之web服务利器Flask生产环境部署实践【基于gunicorn部署生产环境】
  10. python基于给定时间戳生成 未来/过去 前进/倒退 n个小时的时间戳