手写springboot_Spring Boot 入门教程 | 图文讲解

fa603c8158cd2a70b082969ce3608d9a.png

目录

一、Spring Boot 是什么

二、为什么要使用 Spring Boot

三、快速入门

  • 3.1 创建 Spring Boot 项目
  • 3.2 项目结构
  • 3.3 引入 Web 依赖
  • 3.4 编写第一个接口
  • 3.5 启动程序,验证效果

四、总结

五、GitHub 示例代码

一、Spring Boot 是什么

以下截图自 Spring Boot 官方文档:

8a63c9dbbc119fc874078bc6f39e4dee.png

翻译整理一下,内容如下:

Spring Boot 是基于 Spring 框架基础上推出的一个全新的框架, 旨在让开发者可以轻松地创建一个可独立运行的,生产级别的应用程序。

基于 Spring Boot 内部的自动化配置功能,开发者可以在"零"配置, 或者只需要添加很少的配置,就可以进行日常的功能开发。

二、为什么要使用 Spring Boot

用权威说话,下图同样截图自 Spring Boot 官方文档:

f181d237848e43368d18354316b60101.png

我们再来翻译整理一下,内容如下:


  • 1、能够轻松、方便地创建一个 Spring 应用;
  • 2、直接使用内嵌的 Tomcat, Jetty, Undertow 容器(无需再手动安装容器,通过部署 WAR 包的方式);
  • 3、内部自动管理各种 Jar 包的版本依赖关系,再也不用为版本冲突而烦恼啦;
  • 4、自动化配置 Spring 相关功能,以及第三方库;
  • 5、提供诸如指标,健康检查, 外部化配置等功能;
  • 6、"零配置",再也不需要手写地狱般的 XML 配置了;

怎么样,看了 Spring Boot 这些强大的特性以后,是不是开始跃跃欲试了,接下来,让我们快速入门 Spring Boot 吧 !

PS: 正由于 Spring Boot 以上特性,才得以使它成为构建微服务架构的基础组件。

三、快速入门

3.1 创建 Spring Boot 项目

3.1.1 通过 Spring Initializr 来创建

  • 1、访问 Spring Initializr 地址:https://start.spring.io:
a756d6939a1ab08840a38f1d9f716447.png

默认情况下,Spring Initializr 生成的项目是通过 Maven 来构建的,开发语言为 Java, 版本用的最新的发行版,打包方式为 Jar, 使用的 Java 版本为 1.8,小伙伴们这里要注意一下!

  • 2、生成项目, 导入到开发工具中

点击 GenerateProject 按钮,下载的 Demo.zip, 解压后,导入到开发工具中,这里笔者使用的是 IntelliJ IDEA。

  • 3、File -> New -> Model from Existing Source, 可参考下图:
e1f4a23b055c2de40f47e4520d1047ca.png
  • 4、弹出框中,选中您的解压后的文件夹 -> OK -> 选择通过 Maven 的方式来导入项目:
db0f71848b198f9d816c053fbcf3fac7.png
  • 5、一路点击 Next -> Finished;

至此,通过 Spring Initializr 网站来创建应用,并导入到了我们的开发工具 IntelliJ IDEA 中就成功了。

PS: 如果您使用的是 Eclipse, 方式是 Import -> Existing Maven Projects -> Next -> 选择解压后的文件夹 -> Finsh

3.1.2 通过 IntelliJ IDEA 来创建应用

其实,我们还可以直接通过 IntelliJ IDEA 来创建一个 Spring Boot 项目,因为 IntelliJ IDEA 内置了 Spring Initializr,接下来,通过图文,让我们来看下要如何一步一步操作:

  • 1、File -> New -> Project, 跳出新建项目弹出框:
ba30d3c680102b060418489595c3c356.png
  • 2、点击 Next,弹出填写 maven 项目的需要的相关信息,这里我们用默认的就好了,继续点击 Next;
  • 3、再次弹出框,这里可以勾选开发中需要的 Starter 的组件, 如 Web, Redis 等,我们这里暂时不勾,后面通过手动添加的方式, 继续点击 Next -> Finish;

3.2 项目结构

项目创建成功后,可以看到结构如下:

b98f385b086640fa9f7fa1715604e1e2.png

共分为三个主要的文件夹:

  • src/mail/java: 存放 Java 源码,包括启动程序的入口;
  • src/mail/resources: 资源目录,用于放置相关配置文件,静态文件 html, css 等;
  • src/test/java: 存放单元测试类

3.3 引入 Web 依赖

在 pom.xml 文件中添加 web 依赖:

org.springframework.boot spring-boot-starter-web

PS: 不用手动去指定版本号,因为 Spring Boot 内部已经维护相关 Jar 包的依赖关系。

3.4 编写第一个接口

在 com.example.demo 包下添加 controller 包,用来存放所有对外部开发的接口, 完成后,创建 HelloController.java 类, 添加一个 /hello 接口:

@RestControllerpublic class HelloController { @GetMapping("/hello") public String hello() { return "Hello, Spring Boot !"; }}

添加 @RestController 注解,表示此类中所有定义的接口均为 RESTFul 风格,也就是说返参均为 JSON 格式的。

@GetMapping("/hello") 表示定义一个 GET 请求的接口,路径为 /hello。

3.5 启动程序,验证效果

69fdfa7b2dc772d86dbe98981cd00620.png

根据图示,点击按钮,来启动 Spring Boot Web 程序, 查看控制台输出:

 . ____ _ __ _ _ / / ___'_ __ _ _(_)_ __ __ _    ( ( )___ | '_ | '_| | '_ / _` |     / ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.4.RELEASE)2019-04-14 19:57:59.795 INFO 3680 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication on 192.168.0.100 with PID 3680 (/Users/a123123/Work/IdeaProjects/demo/target/classes started by allen-jiang in /Users/a123123/Work/IdeaProjects/demo)2019-04-14 19:57:59.798 INFO 3680 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to default profiles: default2019-04-14 19:58:00.666 INFO 3680 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)2019-04-14 19:58:00.689 INFO 3680 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]2019-04-14 19:58:00.689 INFO 3680 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.17]2019-04-14 19:58:00.756 INFO 3680 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2019-04-14 19:58:00.757 INFO 3680 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 920 ms2019-04-14 19:58:00.978 INFO 3680 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'2019-04-14 19:58:01.183 INFO 3680 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''2019-04-14 19:58:01.186 INFO 3680 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 1.678 seconds (JVM running for 2.176)

当控制台日志中输出了 Tomcatstarted on port(s):8080(http)withcontext path''时,表示内嵌的 Tomcat 容器已经启动成功了,端口为 8080 !

接下来,我们在浏览器上访问 http://localhost:8080/hello 接口,验证一下,接口是否能够正常访问:

4c8bf65d9ac63294791bb45ba557d6b9.png

返回了我们想要的 Hello,SpringBoot! 字符串,接口访问正常,大工告成!

四、总结

本文中,我们首先了解了什么是 Spring Boot, 以及Spring Boot 的相关特性,最后我们手把手学习了如何搭建一个 Spring Boot 项目,并编写了第一个接口且访问成功。

通过实际操作,真切地感受到了 Spring Boot 的魅力所在!老铁,双击 666!

赠送 | 面试&学习福利资源

最近在网上发现一个不错的 PDF 资源《Java 核心面试知识.pdf》分享给大家,不光是面试,学习,你都值得拥有!!!

获取方式: 关注公众号: 小哈学Java, 后台回复 资源,既可获取资源链接,下面是目录以及部分截图:

424fd58e676dd50d5b6ac9c2bd128d71.png
98a2fd74fb2c9e40dc909b6cc15c75c2.png
8bafc222006aff4ef7e84cb1a81e687d.png
8944fed8f910f8918e61325ae04e882c.png
1ddc19661b40580ad7e05faa973c3f33.png
6a9b54024a63528fc7d950ce4c2b75b9.png
2551f810c6f55766139dffaee5f6b35c.png

重要的事情说两遍,获取方式: 关注公众号: 小哈学Java, 后台回复 资源,既可获取资源链接 !!!

欢迎关注微信公众号: 小哈学Java

c8a615cea1d258d963928de76ec1dde3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lunix 安装python3

Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装python3和python2共存 首先去python官网下载…

手机音视频应用开发(专注于Symbian、iPhone、Android等跨平台音视频应用开发方案)

一款好的手机应用, 能让用户在第一分钟就爱上他, 一款烂的手机应用, 能让用户在第一分钟就要卸载它。 好的应用必须的稳定、快速。市场日益激励,一个项目的周期是一个漫长的过程,投入的时间、精力、费用。一笔庞大的预…

Colemak布局的实现 Window+Linux+Android

Colemak布局的实现 WindowLinuxAndroid title: ‘Colemak布局的实现’ subtitle: ‘一个极客的键盘布局’ tags: entertainment solution 前言 大部分同学使用的键盘布局都是QWERTY布局 而科学研究表明,可能这个设计不是最高效率的布局,甚至的有意为了降低打字的效率而研究的…

机器学习之朴素贝叶斯法

转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 朴素贝叶斯法是机器学习模型中一个比较简单的模型,实现简单,比较常用。 是定义在输入空间上的随机向量,是定义在输出空间上的随机变量。是和的联合概率分布。训练数据集由独立同…

如何让梯形变成平行四边形_开放的课堂 创新的天地——平行四边形的面积教学片段与反思...

一、 课题的确定学生在三年级学过长方形、正方形的面积计算,经历过从数方格的办法得出面积计算公式的过程。因此,学生对于面积计算公式的推导有一定的经验和知识基础。基于上述考虑,我想完全放手让学生去研究如何计算平行四边形的面积。这对学…

bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘

1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 387 Solved: 288[Submit][Status][Discuss]Description 为了防止口渴的食蚁兽进入他的农场,Farmer John决定在他的农场周围挖一条护城河。农场里一共同拥有N(8…

音视频编解码的一些源代码

音视频编解码的一些源代码 (转)资料名称:音视频编解码的一些源代码 资料成文时间:不详 语言:英文 页数:很多 何人所著(来源): 文件格式:原代码 开发工具:vc 说…

Vue之组件之间的数据传递

Vue的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据,必须使用特定的方法才能实现组件之间的数据传递。 下列为在vue-cli创建项目中的操作 一父组件向子组件传递数据 在Vue中,用props向子组件传递数据。 子组件部分&#…

偶然发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便

发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便 Moderate,意思为适中的,适度的,用这个作为代号,主要取决于他的本名“中用”,其一以贯之的想法就是中庸,秉承着以人为本的态度&#xf…

案例 自动办公_1300张办公系列前台参考图,请您查收!

设计情报局室内设计师的灵感聚集地关注一个有格调的空间必定有一处高颜值的前台漂亮的前台很重要...是空间给人的第一印象一个独一无二的前台设计还可以提升整个空间的气质与逼格连个漂亮的前台都没有作为颜控界扛把子的设计师们还怎么混?SO今天小编给大家带来一份《…

iframe里面的元素触发父窗口元素事件的jquery代码 转

例如父窗口定义了一个事件。 top: $(dom1).bind(topEvent, function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, parent.document).trigger(topEvent); 看似正确,实则误导人。 因为父窗口的jquery对象与iframe里…

mplayer 所支持的音视频编解码

这里我把mplayer 所支持的音视频编解码都罗列出来,方便大家查阅;-----------------------------------------------------------------------------------------------Video codecs:Working video codecscodec namefourcccodecfileoutcommentsFFmpeg Zip…

使用ifconfig取出网卡eth0的ip地址

方法1:sed命令12[rootoldboyedu ~]# ifconfig eth0 |sed -n 2p |seds#^.*addr:##g|sed s# B.*$##g10.0.0.50方法2:cut12[rootoldboyedu ~]# ifconfig eth0|grep inetaddr|cut -d ":" -f2|cut -d " " -f110.0.0.50方法3:…

目标检测_目标检测 | Anchor free的目标检测进阶版本

今天说的是《Soft Anchor-Point Object Detection》,其也是最近关于anchor free的目标检测的论文,作者来自于CMU,一作同样也是FSAF(2019 CVPR)的作者。该论文的出发点还是在样本选择和FPN特征选择层面。背景Anchor free是目标检测领域的一个研…

Colly实现豆瓣电影Top250爬取

使用 Colly 实现 豆瓣电影Top250爬取 package mainimport ("encoding/csv""github.com/PuerkitoBio/goquery""github.com/gocolly/colly""log""os""strings""time" )type Movie struct {idx string…

homework1

一.什么是RUP?二.什么是XP?三.什么是敏捷过程? 一。什么是RUP?RUP是一种完整而且完美的软件过程 1。最佳实践 (1)迭代式开发 (2)管理需求 (3)使用基于构件软件的体系结构 (4&…

编程:休息片刻的好处

原文作者 Axel Rauschmayer 是一位居住在德国慕尼黑的自由软件工程师。他在这篇博文列举了在编程期间休息片刻的一些好处。 你会更精明而不是更卖力地工作。我曾经为了一个功能的实现而卖力工作过。每天12小时,整整工作了两个星期。我付出了很多努力。那两个星期之…

五个温度带的分界线_女神建筑师在拿破仑故乡打造的海景别墅,超美!超有温度!【环球设计2225期】...

生活的温度 法国建筑师阿米莉亚塔维拉(Amelia Tavella)一直对设计充满热情,她出生在阿雅克肖市,在巴黎的建筑学院学习建筑专业,如今她居住普罗旺斯地区的艾克斯。她说:“设计让我涉足很多有趣的领域并能充分发挥我的想象力。这是一…

1118. Birds in Forest (25)

并查集。。。要用路径压缩&#xff0c;不然会超时&#xff0c; #include<iostream> #include<string> #include<map> #include<vector> #include<algorithm> #include<queue> #include<set> #include<stack> using namespace …

Java线程池有哪些作用

线程池 线程池的作用 核心点:复用机制提前创建好固定的线程一直在运行状态实现复用限制线程创建数量。 1.降低资源消耗:通过池化技术重复利用已创建的线程&#xff0c;降低线程创建和销毁造成的损耗。 2.提高响应速度:任务到达时&#xff0c;无需等待线程创建即可立即执行。…