Spring Boot 第一弹,问候一下世界!!!
持续原创输出,点击上方蓝字关注我吧

目录
前言 什么是Spring Boot? 如何搭建一个Spring Boot项目? 第一个程序 Hello World 依赖解读 什么是配置文件? 什么是启动类? 如何进行单元测试?
前言
相信从事Java开发的朋友都听说过SSM框架,这还算年轻的,老点的甚至经历过SSH,说起来有点恐怖,哈哈。比如我就是经历过SSH那个时代末流,没办法,很无奈。
当然无论是SSM还是SSH都不是今天的重点,今天要说的是Spring Boot,一个令人眼前一亮的框架,从大的说,Spring Boot取代了SSM 中的SS的角色。
今天这篇文章就来谈谈Spring Boot,这个我第一次使用直呼爽的框架。
什么是Spring Boot?
Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来Spring 应用程序并且尽可能减少你的配置文件。
Spring Boot 的设计目的简单一句话:简化Spring应用的初始搭建以及开发过程。
从最根本上来讲,Spring Boot 就是一些库的集合,它能够被任意项目的构建系统所使用。它使用 “约定大于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让你的项目快速运行起来。
约定大于配置这个如何理解?其实简单的来说就是Spring Boot在搭建之初就内置了许多实际开发中的常用配置,只有少部分的配置需要开发人员自己去配置。
如何搭建一个Spring Boot项目?
其实搭建一个SpringBoot项目有很多种方式,最常见的两种方式如下:
创建Maven项目,自己引入依赖,创建启动类和配置文件。 直接IDEA中的 Spring Initializr创建项目。
第一种方式不适合入门的朋友玩,今天演示第二种方式搭建一个Spring Boot项目。
第一步在IDEA中选择File-->NEW-->Project,选择Spring Initializr,指定JDK版本1.8,然后Next。如下图:

第二步指定Maven坐标、包名、JDK版等信息,然后Next,如下图:

第三步选择自己所需要的依赖、Spring Boot的版本,Spring Boot与各个框架适配都是以starter方式,这里我们选择WEB开发的所需的starter即可,如下图:

第四步指定项目的名称,路径即可完成,点击Finish等待创建成功,如下图:

创建成功的项目如下图:

其中的DemoApplication是项目的启动类,里面有一个main()方法就是用来启动Spring Boot。application.properties是Spring Boot的配置文件。
此时可以启动项目,在DemoApplication运行main方法即可启动,启动成功如下图:

由于SpringBoot默认内置了Tomcat,因此启动的默认端口就是8080。
第一个程序 Hello World
学习任何一种技术总是要问候一下世界,哈哈..........
既然是WEB开发,就写个接口吧,前面创建的时候已经引用了WEB的starter,如果没有引用,则可以在pom.xml引入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
下面写一个 HelloWorldController如下:
package com.example.demo.controller;
@RestController
public class HelloWorldController {
@RequestMapping("/hello")
public String helloWorld(){
return "Hello World";
}
}
@RestController:标记这是一个controller,是@Controller和
@ResponseBody这两个注解的集合。
@RequestMapping:指定一个映射
以上两个注解都是Spring中的,这里就不再细说了。
由于内置的Tomcat默认端口是8080,所以启动项目,访问http://127.0.0.1:8080/hello即可。
依赖解读
Spring Boot项目中的pom.xml中有这么一个依赖,如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/>
</parent>
<parent>这个标签都知道什么意思,父亲是吧,这么个标签主要的作用就是用于版本控制。这也就是引入的WEB模块starter的时候不用指定版本号<version>标签的原因,因为在spring-boot-starter-parent中已经指定了,类似于一种继承的关系,父亲已经为你提供了,你只需要选择用不用就行。
为什么引入spring-boot-starter-web就能使用Spring mvc的功能呢?
这确实是个难以理解的问题,为了理解这个问题,我们不妨看一下spring-boot-starter-web这个启动器都依赖了什么?如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
看到这应该明白了吧,spring-boot-starter-web这个starter中其实内部引入了Spring、springmvc、tomcat的相关依赖,当然能够直接使用Spring MVC相关的功能了。
什么是配置文件?
前面说过application.properties是Spring Boot的配置文件,那么这个配置文件究竟是配置什么的呢?
其实Spring Boot为了能够适配每一个组件,都会提供一个starter,但是这些启动器的一些信息不能在内部写死啊,比如数据库的用户名、密码等,肯定要由开发人员指定啊,于是就统一写在了一个Properties类中,在Spring Boot启动的时候根据前缀名+属性名称从配置文件中读取,比如WebMvcProperties,其中定义了一些Spring Mvc相关的配置,前缀是spring.mvc。如下:
@ConfigurationProperties(prefix = "spring.mvc")
public class WebMvcProperties {
那么我们需要修改Spring Mvc相关的配置,只需要在application.properties文件中指定spring.mvc.xxxx=xxxx即可。
其实配置文件这块还是有许多道道儿的,后面文章会详细介绍。
什么是启动类?
前面说过启动类是DemoApplication,源码如下:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication是什么?其实一眼看上去,这个类在平常不过了,唯一显眼的就是@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 {}
我滴乖乖儿,注解叠加啊,完全是由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解叠加而来。
ComponentScan:这个注解并不陌生,Spring中的注解,包扫描的注解,这个注解的作用就是在项目启动的时候扫描启动类的同类级以及下级包中的Bean。
@SpringBootConfiguration:这个注解使Spring Boot的注解,源码如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
从源码可以看出,@SpringBootConfiguration完全就是的@Configuration注解,@Configuration是Spring中的注解,表示该类是一个配置类,因此我们可以在启动类中做一些配置类可以做的事,比如注入一个Bean。
@EnableAutoConfiguration:这个注解看到这个名字就知道怎么回事了,直接翻译码,开启自动配置,真如其名,源码如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
又是一个熟悉的注解@Import,什么功能呢?快速导入Bean到IOC容器中,有三种方式,这里用的是其中一种ImportSelector方式。不是本文重点,不再细说。
@EnableAutoConfiguration这个注解的作用也就一目了然了,无非就是@Import的一种形式而已,在项目启动的时候向IOC容器中快速注入Bean而已。
好了,启动类就先介绍到这,后续讲到源码文章才能更清楚的了解到这个类的强大之处。
如何进行单元测试?
Spring Boot项目创建之处为我们提供了一个单元测试的类,如下:
@SpringBootTest
class DemoApplicationTests {
@Test
void contextLoads() {
}
}
@SpringBootTest:这个注解指定这个类是单元测试的类。
在这个类中能够自动的获取IOC容器中的Bean,比如:
@SpringBootTest
class DemoApplicationTests {
@Autowired
private HelloWorldController helloWorldController;
简单的介绍下而已,实际开发中用不到,随着项目越来越大,启动的时间越来越长,谁会傻到启动一个测试方法来检验代码,纯粹浪费时间。
总结
作为Spring Boot的第一弹,写到这儿就结束了,没什么的深入的内容,只是简单的对Spring Boot做了初步的了解。
本文使用的开发工具是IDEA,有需要2020版本的公众号【码猿技术专栏】回复关键词IDEA2020,有需要IDEA破解包的回复关键词IDEA破解包
Spring Boot 第一弹,问候一下世界!!!的更多相关文章
- 借助Maven入手Spring Boot第一个程序
目前网上有不少Spring Boot的入门文章,都很有帮助,本人最近在深入学习Spring Cloud,在搭建第一个Hello World程序时,感觉对于新手而言,介绍文章怎么详细都不为过,因为其中坑 ...
- 我的自定义框架 || 基于Spring Boot || 第一步
今天在园子里面看到一位大神写的springboot做的框架,感觉挺不错,遂想起来自己还没有一个属于自己的框架,决定先将大神做好的拿过来,然后加入自己觉得需要的模块,不断完善 目前直接复制粘贴过来的,后 ...
- 如何使用VS Code编写Spring Boot (第二弹)
本篇文章是续<如何使用VS Code编写Spring Boot> 之后,结合自己.net经验捣鼓的小demo,一个简单的CRUD,对于习惯了VS操作模式的.net人员非常方便,强大的智能提 ...
- Spring Boot第二弹,配置文件怎么造?
持续原创输出,点击上方蓝字关注我吧 前言 自从用了Spring Boot,个人最喜欢的就是Spring Boot的配置文件了,和Spring比起,Spring Boot更加灵活,修改的某些配置也是更加 ...
- Spring Boot第一天
1.首先在idea中创建一个maven项目,创建成功后在pom.xml中添加SpringBoot相关的依赖 <!--引入SpringBoot相关的依赖--> <parent> ...
- Spring Boot -01- 快速入门篇(图文教程)
Spring Boot -01- 快速入门篇(图文教程) 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到[慕课网]手机 app ...
- Spring Boot 2.0的属性绑定
Spring Boot2.0的属性绑定 原文从Spring boot第一个版本以来,我们可以使用@ConfigurationProperties注解将属性绑定到对象.也可以指定属性的各种不同格式.比如 ...
- 精通Spring Boot
原 精通Spring Boot—— 第二十一篇:Spring Social OAuth 登录简介 1.什么是OAuth OAuth官网介绍是这样的: An open protocol to allow ...
- spring boot 实战:我们的第一款开源软件
在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...
随机推荐
- SpringBoot项目 使用Jenkins进行自动化部署 gitlab打tag 生产测试环境使用 含配置中心
脚本 node('master') { def mvnHome = tool 'maven11-free' def gitUrl = "http://gitlab.wdcloud.cc:10 ...
- 个人项目(C语言)
GitHub地址:https://github.com/dachai9/personal-project.git 1. WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数 ...
- python列表元素的基本操作
1.列表元素的增加 python提供三种方法增加元素,append,extend,insert. 区别:例 list3=[1,10,100,1000,10000] A. list3.append ...
- ORB-SLAM: A Versatile and Accurate Monocular SLAM System 笔记(二)
4. 自动地图初始化 地图初始化的目标是两个帧之间相对位姿来三角化一系列的点云(riangulate an initial set of map points),这个操作是独立与场景且不需要人为的干预 ...
- Android开发之模拟器genymotion安装apk出现错误: Install_failed_invalid_URI
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. install failed invalid uri Android开发之模拟器ge ...
- 【干货满满】1.5w字初中级前端面试复习总结
前言 金九银十,又是一波跑路.趁着有空把前端基础和面试相关的知识点都系统的学习一遍,参考一些权威的书籍和优秀的文章,最后加上自己的一些理解,总结出来这篇文章.适合复习和准备面试的同学,其中的知识点包括 ...
- java初探(1)之登录再探
https://www.cnblogs.com/lovejune/p/java_login_1.html 上一章内容搭建起了登录应用场景的环境,模拟实现了登录操作,页面与后端数据的交互过程,使用的是异 ...
- 深入了解Netty【五】线程模型
引言 不同的线程模型对程序的性能有很大的影响,Netty是建立在Reactor模型的基础上,要搞清Netty的线程模型,需要了解一目前常见线程模型的一些概念. 具体是进程还是线程,是和平台或者编程语言 ...
- 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解
文章来自:微信公众号[机器学习炼丹术].欢迎关注支持原创 也欢迎添加作者微信:cyx645016617. 参考目录: 目录 1 基本函数 1.1 Compose 1.2 RandomChoice 1. ...
- 网站远程附件存储到 OSS
参考:链接 链接 链接 简介 网站远程附件功能是指将用户上传的附件直接存储到远端的存储服务器,一般是通过FTP的方式存储到远程的FTP服务器,将论坛附件保存在 OSS 上有以下好处: 附件将拥有更 ...