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 实战:我们的第一款开源软件
在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...
随机推荐
- 算法-搜索(4)ISAM算法
ISAM技术是一种典型的多叉搜索树结构,它使用了3级索引结构:主索引.柱面索引.磁道索引 所有数据记录在基本区按关键码升序排序,后一磁道所有关键码均大于前一磁道.在某一磁道插入新记录时,如果原来该磁道 ...
- 2020.5.24 第四篇 Scrum冲刺博客
Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...
- Python 30道高频面试题及详细解答
开学啦,开学啦!周末坐地铁的时候看到很多同学推着行李箱,拎着大包小包的穿梭在人群中,哎新的一学期又开始啦,同时也意味着很多同学要准备毕业啦,尤其是准大四,准研三的同学. 今年的招聘行情并不乐观,小公司 ...
- php利用快递100接口获取物流信息
PHP使用CURL调用快递100接口查询运单信息 类代码如下: <?php/** * 快递100接口调用类 * @author 齐云海 * date: 2019/05/29 */ class E ...
- Burst
Unity Burst 用户指南 https://blog.csdn.net/alph258/article/details/83997917 Burst https://unity3d.com/cn ...
- MD5截断比较验证
最近在打De1CTF时在Web项目中碰到了两次MD5截断比较验证的题目,在做题时为了方便顺手写了一个小脚本来爆破Code,下面就简单分享一下思路 以De1CTF线上赛Web3为例,在De1CTF中,我 ...
- Activiti7 流程部署
首先先绘制一个流程图 创建bpmn文件 然后绘制好节点 然后修改节点信息 指定负责人 点击背景,修改ID和名称 保存 然后重命名成xml 使用diagram打开 导出png 然后包xml改回bpmn ...
- Vue 侦听器 watch
1. 侦听器 watch Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性 当属性发生改变时,自动触发属性对应的侦听器. 当需要在数据变化时执行异步或开销较大的操作时,这 ...
- SpringMVC执行流程源码分析
SpringMVC执行流程源码分析 我们先来看张图片,帮助我们理解整个流程 然后我们开始来解析 首先SpringMVC基于Servlet来运行 那么我们首先来看HttpServletBean这个类 他 ...
- 使用镜像安装cygwin、gcc并配置CLion IDE -2020.09.12
使用镜像安装cygwin.gcc并配置CLion IDE -2020.09.12 Cygwin 官网:http://www.cygwin.com/ 下载64bit安装器,并打开选择next 尽量不要装 ...