简介

Spring Boot 帮助我们简化 Spring 应用开发;

以前,我们创建一个 Spring 项目的时候,需要导入 Spring 的一些列包,现在只需要一个 Spring Boot 的启动器,就好了;



就跟这样图一样,以前我们面对是整个 Spring ,现在有个 Spring Boot 挡在前面,大部分时候,我们只需要面对那一个点 ,配置一点点,甚至零配置;

但是 Spring Boot 的目标,不仅仅简化一个 Spring ,它可以和各种框架集成,最终的目标是变为 J2EE 的一站式解决方案 ,Spring Boot 全家桶时代;

一个极好的比喻,以前学的框架,比如 Mybatis ,你把他认为是 孙悟空,能干啥啥,SpringMvc唐僧 ,能干啥啥,那么 Spring Boot 就是一部西游记 ,包罗万象;


优点

  • 快速创建对立运行的 Spring 项目以及主流框架集成;
  • 内置了 Serclet 容器,应用不需要打包成 War 包,打成 jar包,这样服务器上,无须再安装 Tomcat 这样的容器,直接使用 java 运行打包好的 jar
  • 使用官方的启动器(starters),可以快速的导入依赖和版本控制
  • 大量的自动配置,约定好的,默认的配置,也可以修改默认配置
  • 不再需要 xml 文件了,这个不需要是真的不需要,不是那种 xml代码自动生成

Hello World

不需要再像之前那样,使用 Maven 创建项目,直接使用 IDEASpring Initializr 创建项目;

  1. 选择项目创建方式

  2. 填写项目的基本属性

    项目/模块名字,不能含义数字,更正下,懒得再重新截图、打字;

  3. 选择我们需要的组件

    这里我仅仅需要Web环境,我们选中的,IDEA 都会联网去下载。

  4. 项目保存路径

  5. 构建完成

此时访问 localhost:8080 会看到一个白板错误页面Spring Boot 的默认错误页面),表示一个 Spring Boot 项目已将创建完成,并且跑起来了;

至于为啥不是一个欢迎页面,而是一个错误页面,原因是默认没配置欢迎页面;

此时,还可以创建一个 处理器 ,处理器的地方,不能随意放,必须保证与上面默认生成的类在一个包下面,或者在其所在包的子包下面;

然后访问 localhost:8080/hello 即可看到 hello world


打包成可执行 jar

通过上面创建项目,pom 文件里面,默认已经加入了打包成可执行 jar 的依赖:


<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

通过 Maven 打包,然后使用 java 命令 java -jar xxxxx.jar 也可运行项目,不需要我们有 tomcat

这样我们的服务器,只需要有 java 环境即可,不需要安装 Tomcat


细节探究

上面的项目可以跑起来,而其还可以处理请求;

我们都没有进行任何配置,最基本的 组件扫描,扫描 bean ,都没有,那么是怎么运行的呢 ?

  1. 父项目

    打开 pom 文件:

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>

    这个父项目,还有一个自己的父项目 spring-boot-dependencies,它管理 Spring Boot 项目应用中所有的依赖的版本,它为所有的可能用到的依赖,都设置了一个默认的版本,是 Spring Boot的版本依赖仲裁中心;

    使用 Spring Boot ,我们导入依赖,默认是不需要写版本的,Spring Boot 的版本仲裁中心会默认的进行管理,如果仲裁中心没有,则需要我们自己手动添加依赖版本号;

  2. 启动器

    	<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    spring-boot-starter-web 分成 spring-boot-starteWeb 两部分看;

    spring-boot-starterSpring boot 的场景启动器,也就是上面的第三步列举出来的那么多的组件,后面的 Web 是场景;

    这里,我们选择了spring-boot-starter-web ,它就帮我们导入了 Web 应用需要的相关依赖,比如 Tomcat 就在这里面;

    Spring Boot 还有许多相关的启动器,基本上将所有的场景都抽取为启动器了,需要使用什么场景,就导入相关的启动器;


主程序类,主入口类上面的注解

  1. @SpringBootApplication

    @SpringBootApplication 来标注一个主程序类,说明这是一个 Spring Boot 应用 ,Spring Boot 应该运行这个类的 main 方法,以启动 Spring Boot 应用;

    @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 {

    除去那几个元注解,还有几个注解,需要我们看下;

  2. @SpringBootConfiguration

    标注在某个类上,用于告诉 Spring Boot,这是一个配置类;

    配置类,是用来替换掉配置文件的,以前写配置文件,现在写配置类;

    代码如下:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Configuration
    public @interface SpringBootConfiguration {
    }

    可以发现其上面有个 @Configuration 注解,而 @Configuration 注解,就是 Spring 的配置类,这里 @Configuration@SpringBootConfiguration 其实一样;

    对了,@Configuration 其实也是容器中的一个组件,在其源代码上可以看到有 @Component 注解 ;

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Configuration {
    @AliasFor(
    annotation = Component.class
    )
    String value() default "";
    }
  3. @EnableAutoConfiguration

    开启自动配置功能, 比如之前的疑问,项目跑起来了,基本的包扫描,我们没有进行配置,其实是 Spring Boot 帮我们进行了自动配置,也就是这个注解的功能;

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import({AutoConfigurationImportSelector.class})
    public @interface EnableAutoConfiguration {

    上面有个 @AutoConfigurationPackage 注解,自动配置包:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @Import({Registrar.class})
    public @interface AutoConfigurationPackage {
    }

    上面有个 @Import({Registrar.class}) 注解,负责给容器导入组件,具体导入什么,由 Registrar.class 决定;

    它将导入该注解所在的包,以及其子包下面的组件导入容器中,由于 @AutoConfigurationPackage注解上面标注了 @Import({Registrar.class}) 注解,而 @AutoConfigurationPackage 又是标注在 @EnableAutoConfiguration 注解上,最后 @EnableAutoConfiguration 标注在 @SpringBootApplication 上,所以也就是,@SpringBootApplication 注解会扫描其所在包及其子包下面的组件,添加到容器中;

    @EnableAutoConfiguration 上面还有一个 @Import({AutoConfigurationImportSelector.class}) 注解,其功能是自动配置选择器,也就是我们选择了启动器对应的场景,这个注解,就会把对应的场景需要的配置,都添加到容器中;


自动生成的项目结构分析

resource 文件夹目录

  • static 保存所有的静态资源:jscssimage 等等
  • templates 保存所有的模板页面,Spring Boot 默认使用 jar 包的嵌入式 Tomcat,不支持 JSP ,可以使用模板引擎 freemarker,thymeleaf ;
  • application.properties Spring Boot 配置文件,可以在里面进行一些配置;

(1)Spirng Boot 入门(笔记)的更多相关文章

  1. spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射

    1.多环境配置 先描述下以前的开发流程:从SVN把项目下载到本地,各种修改配置文件,启动成功:完成功能后上传到公司的测试服务器,修改各种配置文件,启动成功:最后到上线的日子里,把新功能中涉及到的文件打 ...

  2. spring boot入门笔记 (三) - banner、热部署、命令行参数

    1.一般项目启动的时候,刚开始都有一个<spring>的标志,如何修改呢?在resources下面添加一个banner.txt就行了,springboot会自动给你加载banner.txt ...

  3. spring boot入门笔记 (一) - 一个简单的说明+一个案例

    spring boot 简化开发:把平时开发者最常用的到一些步骤,按照开发者的习惯,把能包装的就包装成一些固有的工具类(就比如我们之前连接数据库时常写的DB工具类).当然,是在原有的spring框架的 ...

  4. spring boot入门笔记 (二) - application.properties配置文件

    项目最重要的一个东西,用来定义整个项目的一些东西(端口.访问项目的名称.数据源.日志.集成mybatis等框架.静态资源目录.thymeleaf.热部署等),很重要很重要的. #整个项目的端口号,默认 ...

  5. Spring Boot 快速入门笔记

    Spirng boot笔记 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  6. SpringBoot入门笔记(一)、HelloWorld

    本文是一篇SprintBoot学习入门笔记 1.打开Eclipse,版本为Oxygen 4.7.0 2.新建项目NewProject->MavenProject->Next->Nex ...

  7. Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

  8. Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

  9. Ruby小白入门笔记之 <Gemfile 文件>

    因为初学Ruby,四处查资料无果,才来的贴出亲自试过的操作,覆盖整个个人入门笔记博客中,故所有的操作,都以最明了的方式阐述,当你创建完一个新的Rails应用后,你发现JAVA中我们可以编写maven聚 ...

随机推荐

  1. 【Vue.js游戏机实战】- Vue.js实现九宫格水果机抽奖游戏总结

    大家好!先上图看看本次案例的整体效果. 完整版实战课程附源码:[Vue.js游戏机实战]- Vue.js实现九宫格水果机抽奖 实现思路: Vue component实现九宫格水果机组件,可以嵌套到任意 ...

  2. 记录vsCode配置node开发环境

    环境:win10,idea:vscode 1:安装Visual Studio Code 下一步下一步.(很早之前就安装了). 2:安装node. http://nodejs.cn/download/  ...

  3. 以前进行的程序安装创建了挂起的文件操作(SqlServer2000或SqlServer 2000 SP4补丁安装)

    在安装SqlServer 2000或者SqlServer 2000 SP4补丁时常常会出现这样的提示,从而不能进行安装,即使重新启动了计算机,也还是会有同样的提示.在网上查了一下资料,原来是注册表里记 ...

  4. Tomcat学习四步走:内核、集群、参数及性能

    主题简介: 内核实现原理 分布式集群 生产部署关键参数 性能监控和分析 一.内核实现原理 HTTP Web服务器与浏览器之间以HTTP协议通信,浏览器要访问服务器即向服务器发送HTTP请求报文. 如图 ...

  5. CEF3开发者系列之Cookies管理和共享<转>

    原帖地址:https://www.cnblogs.com/guolixiucai/p/6994559.html 涉及网页登录相关的技术,Cookies肯定是忽略不了的.由于项目的需要,要做一个双核的产 ...

  6. 对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。 Nested exception: 对实体 "useSSL" 的引用必须以 ';' 分隔符结尾

    今天在定义数据源的时候,在配置context.xml文件时,连接mysql数据库的url一行发生错误,报错:“对实体 "useSSL" 的引用必须以 ';' 分隔符结尾”.以下是我 ...

  7. text-align-last 实现文本居中对齐

    1.示例代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  8. org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application

    编程中遇到:org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot ...

  9. 胶囊网络 -- Capsule Networks

    胶囊网络是 vector in vector out的结构,最后对每个不同的类别,输出不一个向量,向量的模长表示属于该类别的概率. 例如,在数字识别中,两个数字虽然重叠在一起,Capsule中的两个向 ...

  10. [Java/File]读取日文CSV文件不乱码

    try { StringBuilder sb=new StringBuilder(); sb.append("\nContent in File:'"+filePathname+& ...