背景

最近因公司需要,开始研究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. java实现 洛谷 P1427 小鱼的数字游戏

    题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...

  2. Java实现第九届蓝桥杯等腰三角形

    等腰三角形 题目描述 本题目要求你在控制台输出一个由数字组成的等腰三角形. 具体的步骤是: 1. 先用1,2,3,...的自然数拼一个足够长的串 2. 用这个串填充三角形的三条边.从上方顶点开始,逆时 ...

  3. Java实现第九届蓝桥杯倍数问题

    倍数问题 题目描述 [题目描述] 众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数.但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼.现在小葱给了你 n 个数,希望你从这 n ...

  4. 如何安装vue脚手架?

    前提(已经安装好node,可以正常使用npm) 一.cmd输入 npm install vue-cli -g ---- 全局安装vue-cli工具 安装好过后,再输入指令 vue --version ...

  5. tensorflow2.0学习笔记第一章第五节

    1.5简单神经网络实现过程全览

  6. SqlServer下一些实用的sql语句收集

    清理数据库日志 USE [master] ALTER DATABASE [表名] SET RECOVERY SIMPLE WITH NO_WAIT ALTER DATABASE [表名] SET RE ...

  7. 如何优雅地停止 Spring Boot 应用?

    首先来介绍下什么是优雅地停止,简而言之,就是对应用进程发送停止指令之后,能保证正在执行的业务操作不受影响,可以继续完成已有请求的处理,但是停止接受新请求. 在 Spring Boot 2.3 中增加了 ...

  8. [C#.NET 拾遗补漏]04:你必须知道的反射

    阅读本文大概需要 3 分钟. 通常,反射用于动态获取对象的类型.属性和方法等信息.今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的. 获取类型的成员 Type 类的 GetMe ...

  9. Python模拟用户登录场景

    简单模拟登录场景,将已知的用户名及密码固化,通过用户输入内容和已固化的内容比较进行判断用户名和密码是否输入正确. 在用户输入时,将密码隐藏需要导入模块getpass import getpass _u ...

  10. 解读Spring源码之前的准备

    请忽略以下的文章,现在回过头来才发现学习源码不用如此复杂 1.IDEA 新建一个maven项目, 2.pom 中倒入 spring5 的基本包,然后利用maven 插件down下源码 3.然后就可以开 ...