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 实战:我们的第一款开源软件
在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...
随机推荐
- Shell编程—基础脚本
1. 使用多个命令 如果要两个命令或者多个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开. 2. 创建 shell 脚本文件 例如: #!/bin/bash # This script dis ...
- Python输入input、输出print
1.输入input input是用于输入数据给变量.通过键盘输入的是字符串,如果需要其他格式,需要做转换.比如int.float类型数据,int() 如下是一个例子: 如果a不进行int转换,那么输入 ...
- 2个案例带你快速实现Response返回值
今天先来学习一下Response的相关知识. 所有返回前台的内容其实都应该是Response的对象或者其子类,我们看到如果返回的是字符串直接可以写成return u'字符串内容'的形式,但是其实这个字 ...
- AQI分析
A Q I 分 析 1.背景信息 AOI( Air Quality Index),指空气质量指数,用来衡量空气清洁或污染的程度.值越小,表示空气质量越好.近年来,因为环境问题,空气质量也越来越受到人 ...
- C#转PHP
官方主页 https://github.com/isukces/cs2php 快速开始 http://www.cs2php.com/how-to-begin.htm#.W2rBhC2B3mI 如何在V ...
- 为什么 char 数组比 String 更适合存储密码?
推荐阅读:5 个刁钻的 String 面试题! 另一个基于 String 的棘手 Java 问题,相信我只有很少的 Java 程序员可以正确回答这个问题. 这是一个真正艰难的核心 Java 面试问题, ...
- 跟着兄弟连系统学习Linux-【day06】
day06-20200603 p21.用户管理命令 [useradd 用户名]添加用户 [passwd 用户名] 设置密码
- [Python]在当前目录下创建三个目录
import os os.mkdir("2018-03-16-b018") os.mkdir("2019-03-16-b019") os.mkdir(" ...
- LayUi超级好用的前端工具
日期:https://www.layui.com/laydate/ LayUi 首页地址:https://www.layui.com/
- 为什么选择H5游戏开发定制?
为什么选择H5游戏开发定制? 随着微信H5游戏推广带来的显著效果,越来越多的商家已经加入到游戏营销的队伍中来, 对H5小游戏有了解的商家都知道,[模板游戏]的价格往往低于[定制游戏]的价格,可是为什么 ...