springboot简介


这篇文章回答了什么是springboot,如何使用springboot,以及为什么要使用springboot。并且提供一个springboot的实例应用,讨论一些springboot的核心的原理

1.介绍springboot

springboot可以使单体环境或者生产环境中基于spring的应用程序编码运行更加简单,springboo使spring应用支持很多第三库,使得我们在开发基于spring的应用时使用更少的配置,做更多的事情。

通常我们在使用传统的spring应用程序时,会有复杂的操作流程,但是使用springboot,只需要简单的使用java命令就可以运行应用程序了,例如java -jar。

springboot的主要目标是:

  • 让spring应用开发者可以迅速的上手springboot应用程序
  • 远离大量的默认配置,将精力放到开发上面。
  • 提供大量的非功能特性,比如security, metrics, health checks, and externalized configuratio
  • 零代码生成,不需要配置xml文件。

2.系统要求

Spring Boot 2.1.5.RELEASE 版本需要java8版本,向上兼容到java11.
需要的spring版本是 Spring Framework 5.1.7.RELEASE及以上。如果要使用构建工具构建项目,工具的版本要求如下:

构建工具版本号
Maven3.3+
Gradle4.4+

2.1 Servlet容器

springboot支持下列的内置Servlet容器

名称Servlet版本
Tomcat9.04.0
Jetty9.43.1
Undertow 2.04.0

也可以将springboot应用程序部署到兼容Servlet3.1+的容器。

3.使用springboot

springboot应用程序可以使用j传统的java开发集成环境或者java命令行,与此同时需要注意springboot所需要的jdk版本,可以在命令行中键入如下:
$ java -version
只需要注意jdk版本兼容springboot即可。

3.1 java开发者如何运行springboot应用程序

可以将springboot当做和普通Java库一样,只需要将正确的spring-boot-*.jar加入到classpath路径中,springboot应用不需要额外的工具集成就可以使用,所以可以使用任何IDE或者文本编辑器。springboot应用程序和普通Java程序一样可以快速使用并且调试。
虽然可以将springboot所需要的jar包手动拷贝到classpath工作路径,但是使用依赖管理工具,例如Maven或者Gradle会更加方便。

3.1.1 Maven安装

springboot和Maven3.3+兼容,如果你已还没有安装maven,那么你需要跟着这个链接maven.apache.org来安装下maven

springboot依赖使用 groupIdorg.springframework.boot 一般情况下,Maven POM文件可以继承自spring-boot-starter-parent项目也可以声明一个或者多个 “Starters”.
springboot可以使用可选的 Maven 插件来创建可执行jars包。
下面展示pom.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>

	<groupId>com.example</groupId>
	<artifactId>myproject</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<!-- Inherit defaults from Spring Boot -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.5.RELEASE</version>
	</parent>

	<!-- Add typical dependencies for a web application -->
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

	<!-- Package as an executable jar -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

使用spring-boot-starter-parent是一个很好的使用springboot的方式,但是并不是所有的时候都适合使用这种方式,有时你可能需要从其他的父POM继承,那么你就不会喜欢默认的设定,在这种情形下,可以参考 Section 13.2.2, “Using Spring Boot without the Parent POM”.到底使用哪种方式,主要是看应用环境。

4.开发首个Spring Boot应用程序

开始写一个简单的springboot版本的hello world 程序,并使用一些关键的springBoot关键特性,使用Maven来构建项目。

在开始之前,需要确保你的java版本和maven版本。

在这里插入图片描述
mvn -v命令检查maven是否安装按本是否适合。

4.1 创建POM文件

需要从创建Maven pom.xml文件开始。pom.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>

	<groupId>com.example</groupId>
	<artifactId>myproject</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.5.RELEASE</version>
	</parent>

	<!-- Additional lines to be added here... -->

</project>

4.2 添加classpath依赖

springboot提供很多的"Starters"来让你想classpath添加jars包,我们的实例应用已经使用了spring-boot-starter-parent 在POM parent区域中,sping-boot-starter-parent是一个特殊的starter,它提供了很多有用的Maven默认配置,它也提供了一个依赖管理模块,让你忽略依赖的版本问题。
其他的“Starters”提供了一些开发其他特定类型应用程序的依赖。当我们开发一个web应用程序之前,我们添加一个spring-boot-starter-web依赖,在此之前,我们需要做一个检查,通过运行如下命令:

$ mvn dependency:tree

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

mvn dependency:tree命令打印了一个代表工程依赖的树形结构,可以看到spring-boot-starter-parent没有依赖任何其他的元素。如果要添加必要的依赖,只需要编辑pom.xml文件,在parent区域下面加入spring-boot-starter-web依赖。

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>

如果你再次运行mvn dependency:tree,你会发现这里会有额外的依赖出现,包括tomcat web服务和spring boot本身。

4.3 编写代码

为了完成我们的应用程序,需要编写一个Java文件。默认情况下,Maven 会变异src/main/java目录下的源文件,所以需要创建这个文件夹结构并加入一个src/main/java/Example.java,它的内容如下:

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class Example {

	@RequestMapping("/")
	String home() {
		return "Hello World!";
	}

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

}

尽管代码写的很简短,但是代码背后有很多对开发者透明的过程,我们来看一下几个重要的过程。

4.3.1 @RestController和@RequestMapping注解

在我们的例子中的第一个注解是@RestController,它提供了阅读代码的暗示并且在spring中扮演特殊的角色。这本实例中,我们的类是一个web的@Controller。所以spring会在请求来到web端时考虑这个加了注解的类。
@RequestMapping注解提供了路由信息。它告诉Spring所有有路径信息的HTTP request应该映射到哪个home方法。@RestController注解告诉Spring将结果字符串直接返回给调用方。

4.3.2 @EnableAutoConfiguration注解

@EnableAutoConfiguration是二级注解,这个注解告诉springboot在基于你添加的jar包依赖下去猜测你想如何配置Spring。自从spring-boot-starter-web添加了tomcat和spring mvc,自动配置假定你在开发一个web应用程序并且相应的设置了Spring。

关于Starters和自动配置的关系:自动配置可以很好的配合Starters,但是这两个概念并不是直接绑定的,你爷可以将某些jar依赖从Starters中去掉,springboot依然会尽力而为的去对你的应用进行配置。

4.3.3 main方法

应用的最后一个部分就是main方法,这是一个程序入口的标准方法,主方法代表着springboot的SpringApplication,通过调用runSpringApplication启动我们的应用程序。启动spring,接下来启动自动配置的tomcat web服务器,我们需要将Example.class作为一个参数去执行这个方法来告诉SpringApplication哪个是基本的Spring组件。args数组也同时传递给应用来暴露所有的命令行参数。

4.4 运行示例

在这个点上,应用是可以工作的。我们使用了spring-boot-starter-parentPOM,可以使用有效的run目标来启动应用。在工程根目录下键入mvn spring-boot:run命令来启动应用程序,可以看到如下的输出:

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.1.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

打开web浏览器,输入地址localhost:8080,可以看到如下输出,

Hello World!

退出程序使用ctrl-c

4.5 创建一个可执行的jar包

最后我们需要生成一个可以在生产环境中运行的jar可执行jar包,可执行jar包使一个包含了所有的已编译classes和所有的依赖项的可执行的包。
pom.xml文件中加入spring-boot-maven-plugin来创建一个可执行jar,需要向pom.xml文件中插入如下的依赖

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

spring-boot-starter-parentPOM文件包括了<executions>配置来绑定repackage目标,如果没有使用父POM,你需要声明这个配置。

保存pom.xml文件,运行mvn package命令,可以得到如下结果:

$ mvn package

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.5.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

target目录下,你将会发现myproject-0.0.1-SNAPSHOT.jar文件,使用java -jar命令行来运行程序,可以得到如下结果:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.1.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

若要退出程序,输入ctrl-c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值