持续原创输出,点击上方蓝字关注我吧

目录

  • 前言
  • 什么是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项目有很多种方式,最常见的两种方式如下:

  1. 创建Maven项目,自己引入依赖,创建启动类和配置文件。
  2. 直接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开发,就写个接口吧,前面创建的时候已经引用了WEBstarter,如果没有引用,则可以在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中其实内部引入了Springspringmvctomcat的相关依赖,当然能够直接使用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 第一弹,问候一下世界!!!的更多相关文章

  1. 借助Maven入手Spring Boot第一个程序

    目前网上有不少Spring Boot的入门文章,都很有帮助,本人最近在深入学习Spring Cloud,在搭建第一个Hello World程序时,感觉对于新手而言,介绍文章怎么详细都不为过,因为其中坑 ...

  2. 我的自定义框架 || 基于Spring Boot || 第一步

    今天在园子里面看到一位大神写的springboot做的框架,感觉挺不错,遂想起来自己还没有一个属于自己的框架,决定先将大神做好的拿过来,然后加入自己觉得需要的模块,不断完善 目前直接复制粘贴过来的,后 ...

  3. 如何使用VS Code编写Spring Boot (第二弹)

    本篇文章是续<如何使用VS Code编写Spring Boot> 之后,结合自己.net经验捣鼓的小demo,一个简单的CRUD,对于习惯了VS操作模式的.net人员非常方便,强大的智能提 ...

  4. Spring Boot第二弹,配置文件怎么造?

    持续原创输出,点击上方蓝字关注我吧 前言 自从用了Spring Boot,个人最喜欢的就是Spring Boot的配置文件了,和Spring比起,Spring Boot更加灵活,修改的某些配置也是更加 ...

  5. Spring Boot第一天

    1.首先在idea中创建一个maven项目,创建成功后在pom.xml中添加SpringBoot相关的依赖 <!--引入SpringBoot相关的依赖--> <parent> ...

  6. Spring Boot -01- 快速入门篇(图文教程)

    Spring Boot -01- 快速入门篇(图文教程) 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到[慕课网]手机 app ...

  7. Spring Boot 2.0的属性绑定

    Spring Boot2.0的属性绑定 原文从Spring boot第一个版本以来,我们可以使用@ConfigurationProperties注解将属性绑定到对象.也可以指定属性的各种不同格式.比如 ...

  8. 精通Spring Boot

    原 精通Spring Boot—— 第二十一篇:Spring Social OAuth 登录简介 1.什么是OAuth OAuth官网介绍是这样的: An open protocol to allow ...

  9. spring boot 实战:我们的第一款开源软件

    在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...

随机推荐

  1. MySQL数据库根据一个或多个字段查询重复数据

    系统在开发测试过程中出现bug,比如并发操作没有处理好,数据库中往往会插入重复数据,这些脏数据经常会导致各种问题.bug可以修改,但是数据往往也要处理,处理SQL如下: 1.根据一个字段查找重复数据 ...

  2. 牛客网PAT练兵场-部分A+B

    题解:简单循环 题目地址:https://www.nowcoder.com/questionTerminal/fb581ea099a14f5d97c6149cbeee249f /** * *作者:Yc ...

  3. MySQL添加外键报错 - referencing column 'xx' and referenced column 'xx' in foreign key constraint 'xx' are incompatible

    MySQL给两个表添加外键时,报错 翻译意思是:外键约束“xx”中的引用列“xx”和引用列“xx”不兼容 说明两个表关联的列数据类型不一致,比如:varchar 与 int,或者 int无符号 与 i ...

  4. 双操作系统(ubuntu/windows7)安装教程

    前言 前两天出于项目原因,本人心血来潮地给久经战场的电脑老大哥找个小媳妇,哈哈哈,装了两个系统.分别是用了多年的win7和接触不久的Ubuntu,在其中遇到了一些坑,在此记录下来,希望能给自己和大家带 ...

  5. CSP 201312-1 出现次数最多的数

    思路 由于输入的数组元素是 1 ≤ si ≤ 10000,所以开一个 10001 的数组.输入的过程中使用 num 记录出现的最大次数: 在所有输入结束后,遍历数组元素,由于题目要求出现多个众数输出最 ...

  6. [ASP.NET Core开发实战]基础篇05 服务器

    什么是服务器 服务器指ASP.NET Core应用运行在操作系统上的载体,也叫Web服务器. Web服务器实现侦听HTTP请求,并以构建HttpContext的对象发送给ASP.NET Core应用. ...

  7. android studio 如何进行格式化代码 快捷键必备

    在Eclipse中,我们一般使用Ctrl+Shift+F来格式化代码,Android Studio中需要换成: Reformat code CTRL + ALT + L (Win) OPTION + ...

  8. 关于List的remove()方法

    最近遇到一个小问题,我将其简化为下列代码,List的remove()方法在下列颜色注重的代码执行的源码也是不同的~ List<Integer> list=new ArrayList< ...

  9. 修改CentOS的yum源,改为阿里云的镜像

    修改CentOS的yum源,改为阿里云的镜像 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.b ...

  10. leetcode刷题-75颜色分类

    题目 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝 ...