背景

最近因公司需要,开始研究java相关的开发,之前一直从事.net相关开发,所以写的或者理解的不对的地方呢,希望大家批评指正。

首先开发框架吧,就像.net很早之前有asp.net webForm,asp.net MVC,.net core等,Java也有这样的框架,比如Spring Framework、Spring Data、Spring Batch、Spring Security、Spring MVC等等。记得好多年前吧,也接触过java spring开发,当时的感觉就是配置文档太多了,经常因为配置文件错了导致程序起不来,而.net程序就封装得很好,很多东西微软都帮我们做好了,比如asp.net MVC,当我在建立这个项目的时候,IDE已经根据向导帮我们把结构都搭好了,不需要更多的配置,程序员只需要关注业务代码,所以当时也是放弃了JAVA的深入学习。

那么几年后的今天,重新来学java也是感触良多,Java的社区生态活跃度确实比.net好太多,开源项目都是java过来的居多,很多.net的框架也是从java演变和借鉴过来的,好的,废话不说了,我的入门第一课呢,就从Spring Boot开始,有点人觉得Spring都不会,一上来就学Spring Boot是不是不太好。我觉得没啥关系哈,毕竟Spring Boot是个引导,让开发Spring程序更简单化了,接下来我们就探讨下Spring Boot到底是个什么东西?

Spring

为了更好的理解Spring Boot,首先大致了解下Spring哈,如果要用Spring来开发一个Hello World Web应用程序,该做些什么?

  • 一个项目结构,包含必要的Maven或者Gradle构建文件,最起码要有Spring MVC和Servlet API这些依赖。
  • 一个web.xml文件。
  • 一个启用了Spring MVC的Spring配置。
  • 一个控制器类,以“Hello World”响应http请求。
  • 一个用于部署应用程序的Web应用服务器,比如:tomcat

而这些繁琐的工作为什么要开发者自己来提供呢,如果我在创建这个项目的时候就自动生成那该多好啊!那这时候Spring Boot就出现了。

Spring Boot

Spring Boot将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。

  • 自动配置
  • 起步依赖
  • 命令行界面
  • Actuator
  1. 自动配置

    Spring Boot会为常见的配置场景进行自动配置。比如Thymeleaf模板、安全和Spring MVC。
  2. 起步依赖

    我们在项目中会应用到各种各样的库,如何来管理这些依赖项呢?Group和Artifact是什么?你需要哪个版本?会不会有冲突?这些都是要考虑的。

    Spring Boot起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用的库聚合在一起,组成了几个为特定功能而定制的依赖。
  3. 命令行界面

    快速开发Spring应用程序的方法,Spring Boot CLI,不是非必要组成部分。
  4. Actuator

    其他几个都是简化Spring开发,而Actuatro则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就可以窥探应用程序的内部情况了。

项目结构解析

新建项目

我用IntelliJ idea社区版做了一个Demo,通过这个Demo来解析。

首先新建一个项目,选择Spring Assistant,如下图所示,因社区版默认是没有Spring Assistant,也没有Spring initializr,所以必须先安装一个插件。



填些一些基本信息,比如项目名称、Manven Grouphe Artifact Id、JAVA版本等,以及你想用Maven还是Gradle来构建项目。我这里是用Maven来构建项目。



接下来是问你要往项目里添加什么依赖?比如我选择了Spring Web,还有Thymeleaf模板引擎,只要勾上就好。

下一步,最后点击Finish项目就创建好了,我们可以看一下建好的项目结构。

自动配置

DemoApplication.java不仅是启动引导类,还是配置类。

@SpringBootApplication
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

@SpringBootApplication开启组件扫描和自动配置功能。实际上,@SpringBootApplication将三个有用的注解组合在了一起。

  • Spring的@Configuration:标明该类使用Spring基于java的配置。
  • Spring的@ComponentScan:启用组件扫描,这样你写的Web控制类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。
  • Spring Boot的@EnabeAutoConfiguration:这个不起眼的小注解也可以称为@Abracadabra,就是这一行配置开启了Spring Boot自动配置的魔力。

mani()方法让你可以在命令行里把该应用程序当作一个可执行的JAR文件来运行。这里SpringApplication.run()传递了一个DemoApplication类的引用,还有命令行参数,通过这些启动应用程序。

起步依赖

因为我们选的Maven构建的项目,所以会生成乙个pop.xml文件。

pop.xml及起步依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--从spring-boot-starter-parent继承版本号-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<!--指定JDK版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--起步依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--运用Spring Boot插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

说起依赖,都只有五个依赖,除了手工添加的,其他的Artifact ID都有spring-boot-starter-前缀。这些都是Spring Boot起步依赖,它们都有助于Spring Boot应用程序的构建。

请注意pop.xml里的依赖都没有指定版本,那是因为spring-boot-starter-parent作为上一级,这样一来就能利用Maven的依赖管理功能,继承很多常用库的依赖版本,在你声明的时候就不需要指定版本了。

Spring Boot是什么?的更多相关文章

  1. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  2. 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  3. 玩转spring boot——开篇

    很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我 ...

  4. 玩转spring boot——结合redis

    一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...

  5. 玩转spring boot——AOP与表单验证

    AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...

  6. 玩转spring boot——结合JPA入门

    参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...

  7. 玩转spring boot——结合JPA事务

    接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  8. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  9. 玩转spring boot——结合jQuery和AngularJs

    在上篇的基础上 准备工作: 修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  10. 玩转spring boot——MVC应用

    如何快速搭建一个MCV程序? 参照spring官方例子:https://spring.io/guides/gs/serving-web-content/ 一.spring mvc结合thymeleaf ...

随机推荐

  1. Chisel3 - util - ReadyValid

    https://mp.weixin.qq.com/s/g7Q9ChxHbAQGkbMmOymh-g   ReadyValid通信接口.通信的双方为数据的生产者(Producer)和消费者(Consum ...

  2. C#中值类型,引用类型,字符串类型的区别(内存图解)

    如果用图片来解释值类型,引用类型和字符串类型(引用类型的一种)的区别的话 值类型: 引用类型: string类型:

  3. 8.0 以上版本 mySQL数据库导致的命令行可连接,NaviCat不可连接的问题

    错误代码: client does not support authentication 原因: 没有开启Mysql的远程连接配置 解决办法: 1 使用命令行进入数据库 C:\Users\wushao ...

  4. Java实现 蓝桥杯 算法训练 前缀表达式

    算法训练 前缀表达式 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:"运算符 对象1 对象2", ...

  5. 第二届蓝桥杯C++B组国(决)赛真题

    以下代码仅供参考,解答部分来自网友,对于正确性不能保证,如有错误欢迎评论 四方定理. 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示. 我们可以通过计算机验证其在有限范围的正确性 ...

  6. Java实现 洛谷 P1055 ISBN号码

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...

  7. Java实现字符串转换成整数

    1 问题描述 输入一个由数字组成的字符串,请把它转换成整数并输出.例如,输入字符串"123",输出整数123. 请写出一个函数实现该功能,不能使用库函数. 2 解决方案 解答本问题 ...

  8. 初学python笔记

    一.关于python ① 由荷兰人Guido van Rossum(龟叔)于1989年圣诞节为打发无聊时间所编写的编程语言. ② python的特点:优雅 明确 简单.代码量少,运行速度快. 缺点:运 ...

  9. 容器技术之Docker私有镜像仓库docker-distribution

    在前边的博客中我们说到docker的架构由docker客户端.服务端以及仓库组成:docker仓库就是用来存放镜像的地方:其实docker registry我们理解为存放docker镜像仓库的仓库比较 ...

  10. ROS 机器人技术 - 解决 ROS_INFO 不能正确输出 string 的问题!

    一.输出「??」 项目调试一个节点,打印 ROS 信息时发现设置的节点名称都是问号: ROS_INFO("[%s]: camera_extrinsic_mat", kNodeNam ...