背景

最近因公司需要,开始研究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的依赖管理功能,继承很多常用库的依赖版本,在你声明的时候就不需要指定版本了。

最新文章

  1. [WPF系列]-DataBinding 绑定计算表达式
  2. [No000086]C#foreach集合被改变,报错处理方案
  3. Netsuite &gt; Foreign Currency Revaluation 外币评估
  4. IntelliJ IDEA手工安python装插件方法
  5. android: 内容提供器简介
  6. C#如何使用异步编程
  7. ubuntu-E:Encountered a section with no Package: header的解决办法
  8. “代理 XP”组件已作为此服务器安全配置的一部分被关闭。解决方法
  9. 在sql设计中没法修改表结构
  10. jquery点击其他地方隐藏div层的实现程序
  11. 用java面向对象的思想实现的汉诺塔问题
  12. Android中JNI编程的那些事儿(1)
  13. Fizz Buzz
  14. 基本 XAML 语法指南
  15. [ofbiz]less-than (&amp;lt;) and greater-than (&amp;gt;) symbols
  16. DataTable类
  17. Eclipse开发Android项目安装配置
  18. Navicat提示Access violation at address 004E9844 in module ‘comctl32.dll’
  19. 谱聚类(Spectral Clustring)原理
  20. 修复windows通过局域网文件共享访问失败的问题

热门文章

  1. 使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置
  2. Java 第十一届 蓝桥杯 省模拟赛 字母重新排列
  3. Java实现 LeetCode 735 行星碰撞(栈)
  4. Java实现 LeetCode 652 寻找重复的子树(两个map的DFS)
  5. Java实现 LeetCode 517 超级洗衣机
  6. Java实现 蓝桥杯VIP 算法训练 快速排序
  7. opencv 移植
  8. Controller是什么?
  9. ecshop php商城系统数据库结构及表的介绍分析
  10. Kubernetes-subpath的使用