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

目录

  • 前言
  • 什么是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. 使用log4j将数据流入flume

    最近做了一个log抽取的项目,采用log4j+flume实现,在此分享记录一下. 准备 什么是flume? flume是一个提供高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. flume ...

  2. 重学c#系列——盛派自定义异常源码分析(八)

    前言 接着异常七后,因为以前看过盛派这块代码,正好重新整理一下. 正文 BaseException 首先看下BaseException 类: 继承:public class BaseException ...

  3. SICP之1.3中文翻译题目错误

    原版题目: Exercise 1.3: Define a procedure that takes three numbers as arguments and returns the sum of ...

  4. python sqlite3简单操作

    python sqlite3简单操作(原创)import sqlite3class CsqliteTable: def __init__(self): pass def linkSqlite3(sel ...

  5. python练习 数字不同数之和+人名最多数统计

    数字不同数之和 描述 获得用户输入的一个整数N,输出N中所出现不同数字的和.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬ ...

  6. JS - 对金额数字实现千分位格式化处理

    添加千分位处理: function fmoney(s, n) { n = n > 0 && n < = 20 ? n : 2; s = parseFloat((s + &q ...

  7. rabbitmq用户权限

    none:无法登录控制台 不能访问 management plugin,通常就是普通的生产者和消费者. management:普通管理者. 仅可登陆管理控制台(启用management plugin的 ...

  8. 如何把一个一般的git库变成“裸库”?

    语法: git clone --bare 「src」 「dest」 e.g. cd ~/Workspace/SourceRepo/ git clone --bare ./ ../Git/bareRep ...

  9. python笔记-dumps()与loads()的使用

    json.dumps是将一个Python数据类型列表进行json格式的编码解析, 示例如下: >>> import json #导入python 中的json模块 >>& ...

  10. [LeetCode题解]79. 单词搜索

    题目描述 题目:79. 单词搜索 解题思路 遍历 首先找重复性,题目说给定单词是否存在于二维数组中,可以简化为从 (x, y) 走 n 步(n 表示单词长度),查看给定单词是否存在.然后再遍历二维数组 ...