SpringBoot入门详细教程
一、SpringBoot入门
1、SpringBoot简介
SpringBoot是整个Spring技术栈的整合,来简化Spring应用开发,约定大于配置,去繁从简,just run 就能创建一 个独立的,产品级别的应用。
背景:
J2EE笨重的开发、繁多的配置、底下的开发效率、复杂的部署流程、第三方技术集成难度大。
解决:
"Spring全家桶"时代。
Spring Boot ——> J2EE一站式解决方案
Spring Cloud ——>分布式整体解决问题
优点:
快速创建独立运行的 Spring项目以及与主流框架集成
使用嵌入式的Servlet容器,应用无须打成WAR包
starters(启动器)自动依赖与版本控制
大量的自动配置,简化开发,也可修改默认值
无须配置XML,无代码生成,开箱即用
缺点:
入门容易,精通难
是基于Spring技术栈的二次封装,需要对API有深入了解,才能做到融会贯通。
2、微服务
微服务概念起源:2014,martin flower
微服务:架构风格(服务微化)
一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;
每一个功能元素最终都是一个可独立替换和升级的软件单元。
3、环境准备
JDK1.8: java version "1.8.0_162"
Maven: Apache Maven 3.6.1
开发工具:IntelliJ IDEA 2018.3.4 x64
SpringBoot版本:2.3.1
IDEA中Maven配置如下:

4、SpringBoot Hello World!
1、首先点击Create New Project 进入创建页面,点击Spring Initializr,JDK最好为1.8或以上

2、groupId和artifactId是maven管理项目包时用作区分的字段,就像是地图上的坐标。
groupId:groupId分为几个字段,例如com.hello,前面的com叫【域】,后面的是你自己起的域名。
artifactId:artifactId一般是项目名或者模块名。
一般来说,包名根目录=groupId+artifactId。这个是不允许和别人重复的,尤其是需要上线的项目。一般公司为了不重复都会注册一个域名(URL用的那种),这样就肯定不会重复了。

3、选用SpringBoot的版本为2.3.1的稳定版

4、最终确定项目的存放路径,点击finish等待maven自动导包,至此一个SpringBoot项目就构建出来了。

5、此时的目录结构如下所示

6、启动主程序,浏览器输入 http://localhost:8080即可访问

7、新建一个controller,controller要与启动类同级目录,否则会出现访问失败的情况,@Restcontroller相当于@Controller + @ResponseBody, 表明是一个controller,且数据格式为json,代码如下:
@RestController
public class HelloController {
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String hello(){
return "Hello World!";
}
}
controller要与启动类同级目录:

@GetMapping
用于将HTTP GET请求映射到特定处理程序方法的注释。具体来说,@GetMapping是一个作为快捷方式的组合注释@RequestMapping(method = RequestMethod.GET)。
@PostMapping
用于将HTTP POST请求映射到特定处理程序方法的注释。具体来说,@PostMapping是一个作为快捷方式的组合注释@RequestMapping(method = RequestMethod.POST)。
@RequestMapping
一般情况下都是用@RequestMapping(method=RequestMethod.),因为@RequestMapping可以直接替代以上两个注解,但是以上两个注解并不能替代@RequestMapping,@RequestMapping相当于以上两个注解的父类!
除此之外还有其他几种的组合注解,如@PutMapping、@DeleteMapping、@PatchMapping,建议采用组合注解,这样能更加直观的体现请求的方式(参考其他博主)
resource文件夹中目录结构:
- static : 保存所有的静态资源;js css images。
- templates: 保存所有的模板页面;(SpringBoot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freeamarker,thymeleaf)。
- application.properties: Spring Boot应用的配置文件;可以修改一些默认设置。
5、简化部署
<!--这个插件可以将应用打成一个可执行的jar包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
将这个应用打成jar包,并通过java -jar 的命令运行。
打包流程如下:
点击Lifecycle下的package命令生成jar包,在项目的target目录下可找到jar包,cmd命令 + cd jar包路径,执行java -jar + jar包名 即可运行jar包。
先点击package执行打包:

此时可看到target下有jar包生成:

cmd执行jar包:

6、Hello World !深究
1、POM文件
1、父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--他的父项目是 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.1.RELEASE</version>
</parent>
他来真正管理SpringBoot应用里面的所有依赖版本
SpringBoot的版本仲裁中心;
在spring-boot-dependencies中管理的依赖不需要声明版本号。
2、启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-web:
spring-boot-starter :spring-boot场景启动器,例如内嵌了tomcat,帮我们导入了web模块正常运行依赖的组件。
SpringBoot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景的启动器。
2、主程序类,入口类
/**
* 来标注一个主程序类,用来说明这是一个SpringBoot应用
*/
@SpringBootApplication
public class SpringbootHelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootHelloWorldApplication.class, args);
}
}
@SpringBootApplication : SpringBoot应用标注在某个类上说明这个类是SpringBooy的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
@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 {
@SpringBootConfiguration : SpringBoot的配置类;
标注在某个类上,表示这个是一个Spring Boot的配置类;
@Configuration: 配置类上来标注额这个注解;
配置类:配置文件;配置类也是容器中的一个组件,因为标注了@Component注解
@EnableAutoConfiguration:开启自动配置功能;
以前我们需要配置的东西,SpringBoot帮我们自动配置,@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效。
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage : 自动配置包
@Import({Registrar.class});
Spring的底层注解@Import,给容器导入一个组件;导入的组件有Registrar.class;
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包的所有组件扫描到Spring容器。
AutoConfigurationImportSelector:
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()): SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。
J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.3.1.RELEASE.jar

SpringBoot入门详细教程的更多相关文章
- ThinkJS框架入门详细教程(二)新手入门项目
一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...
- spring入门详细教程(五)
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
- Spring入门详细教程(四)
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
- Spring入门详细教程(三)
前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...
- Spring入门详细教程(二)
前言 本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/1016553 ...
- Xcode和github入门详细教程
Xcode和github详细教程! 主要是参考了现在网上的一些资料给没整过的人一个详细的指南. (1)先在github上注册账号,自行解决! (2)在导航栏右上角new一个repository(仓库) ...
- Jenkins自动化部署入门详细教程
大纲 1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试: 或者前后端分离后,经常会修改接口,然后重新部署 ...
- 钉钉开发第三方H5微应用入门详细教程[ISV][免登流程][授权码][HTTP回调推送][识别用户身份][获取用户信息]
转载请注明原文地址:https://www.cnblogs.com/applerosa/p/11509512.html (by lnexin@aliyun.com 世间草木) 此教程注意点: 适用于第 ...
- SpringBoot入门简易教程
使用SpringBoot来开发一个简单的restful api网关功能,目标:实现对SpringBoot的简单入门. 1. 创建SpringBoot项目 可以通过spring官网(https://st ...
随机推荐
- Tomcat/ WebSphere/WebLogic的作用和特点
作用: Tomcat:目前应用非常广泛的免费web服务器,支持部分j2ee. WebSphere:是IBM集成软件平台.可做web服务器,WebSphere提供了可靠.灵活和健壮的集成软件. Webl ...
- (数据科学学习手札87)利用adjustText解决matplotlib文字标签遮挡问题
本文示例代码.数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在进行数据可视化时我们常常需要在可视化作品 ...
- Quartz.Net系列(二):介绍、简单使用、对比Windows计划任务
1.介绍 Quartz是功能强大的开源作业调度库,几乎可以集成到任何Java应用程序中-从最小的独立应用程序到最大的电子商务系统.Quartz可用于创建简单或复杂的计划,以执行数以万计,数以万计的工作 ...
- PytorchMNIST(使用Pytorch进行MNIST字符集识别任务)
都说MNIST相当于机器学习界的Hello World.最近加入实验室,导师给我们安排了一个任务,但是我才刚刚入门呐!!没办法,只能从最基本的学起. Pytorch是一套开源的深度学习张量库.或者我倾 ...
- 关于单向循环链表的约瑟夫问题(Java实现)
关于单向循环链表的约瑟夫问题(Java实现) 最近在学习链表时,遇到单向循环链表中的约瑟夫问题.在构建循环链表的代码上,我有一点很不理解,遂记录下来. Josephu问题为: 设编号为1, 2,.. ...
- 全网最全fiddler使用教程和fiddler如何抓包(fiddler手机抓包)-笔者亲测
一.前言 抓包工具有很多,比如常用的抓包工具Httpwatch,通用的强大的抓包工具Wireshark.为什么使用fiddler?原因如下:1.Wireshark是通用的抓包工具,但是比较庞大,对于只 ...
- 有趣的条漫版 HashMap,25岁大爷都能看懂
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- TensorFlow中读取图像数据的三种方式
本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...
- Day10-微信小程序实战-交友小程序-自定义callPhone 和copyText组件
---为了方便用户可以拨打电话和复制微信号(下面就要实现这样的两个功能) 注意:在小程序中是没办法直接的添加用户的微信的,所以就只能是复制微信号 (这种东西的话可以直接去做,也可以做成组件,做出组件的 ...
- 黎活明8天快速掌握android视频教程--27_网络通信之通过GET和POST方式提交参数给web应用
1该项目主要实现Android客户端以get的方式或者post的方式向java web服务器提交参数 Android客户端通过get方式或者post方式将参数提交给后台服务器,后台服务器对收到的参数进 ...