自动采集编写(SpringBoot做个入门到精通系列(二)入门程序(一))
优采云 发布时间: 2022-01-15 22:06自动采集编写(SpringBoot做个入门到精通系列(二)入门程序(一))
SpringBoot入门大师系列
前言
经过以上的学习,我们已经掌握了Spring的注解编程。有了这个基础之后,我们就可以轻松学习 Spring Boot,因为 Spring Boot 是基于 Spring 的注解编程开发的。接下来正式开始SpringBoot部分部分的学习,我们先做一个入门程序。
三.SpringBoot 启动器
我们来玩个入门案例,用SpringBoot写一个简单的WEB程序,用浏览器访问后台返回一个“Hello Spring Boot”。那么让我想一想,如果我使用SpringMVC来做这个案例,我需要做什么呢?
创建一个web项目(打包成war),导入很多spirng相关、SpringMVC相关、Jackson相关、log相关等jar包。 web.xml中的配置:前端控制器DispatcherServlet;编码过滤器;配置上下文参数(指定Spring的xml配置文件地址)等编写SpringMVC的xml配置文件,然后在里面配置一堆东西写Controller,写方法
总之,用SpringMVC写这个web程序是很麻烦的,那么我们来看看使用SpirngBoot的区别
1.构建 HelloWorld
可以参考构建,也可以按照以下步骤构建
1.1.创建项目
注意,创建项目时,选择skeleton并选择quickstart(普通jar项目都可以),当然也可以不选择skeleton,默认是普通java项目。简而言之,不要创建 webapp 项目(这是为什么呢??)
1.2.导入相关依赖
jar
org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE
org.springframework.boot
spring-boot-starter-web
spring-boot-starter-parent是SpringBoot提供的一个项目,spring-boot-starter-web是SpringBoot集成SpringMVC的依赖。此刻你可能有些疑惑,我稍后会解释,不要急。
1.3.创建配置类
配置类也是启动类,最多粘贴@SpringBootApplication,提供main方法启动应用
@SpringBootApplication
public class ApplicationConfig {
public static void main(String[] args) {
//启动程序
SpringApplication.run(ApplicationConfig.class);
}
}
1.4.写控制器
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello Spring Boot";
}
}
代码就写到这里了,项目结构如下
1.5.开始Main方法测试
控制台启动效果
默认端口为8080,使用浏览器访问:8080/hello,效果如下
我们从一开始就知道 SpringBoot 是用来简化 Spring 应用的构建和开发的。使用 SpringBoot 之后,确实简单很多,集成速度也快很多。但简单的背后意味着复杂的封装。
2.HelloWorld 分析
完成以上案例后,相信你也看到了测试效果。这一刻,你可能很多东西都不明白,比如:为什么在pom.xml中只需要导入一个jar包,为什么web项目使用pingtong java项目的结构;为什么不需要 web.xml;使用main方法启动程序等等。让我们一一解答
2.1.pom.xml分析
pom中有3点需要讲
打包方式:jar使用spring-boot-starter-parent项目导入spring-boot-starter-web依赖包
【重要】对于SpringBoot,即使是WEB项目的开发,也是采用普通java项目的结构。打包方式默认使用jar,不再需要WEB-INF/web.xml等结构。当然SpringBoot也可以使用war来打包项目,这个我们后面会讲到。
在Java中可以看作是extends。继承父项目后,可以使用项目中的依赖。对于spring-boot-starter-parent,该项目是SpringBoot的父项目,提供基础依赖和插件管理。进入spring-boot-starter-parent的pom.xml,可以看到它使用了
继承了一个spring-boot-dependencies项目,如下(ctrl+左键):
org.springframework.boot
spring-boot-dependencies
2.2.5.RELEASE
../../spring-boot-dependencies
spring-boot-starter-parent
pom
Spring Boot Starter Parent
Parent pom providing dependency and plugin management for applications
built with Maven
https://projects.spring.io/spring-boot/#/spring-boot-starter-parent
UTF-8
1.8
@
${java.version}
UTF-8
${java.version}
可以看到,spring-boot-starter-parent继承了spring-boot-dependencies,其打包方式为
pom
,默认JDK版本为1.8,我们可以在自己项目的pom.xml中通过1.7修改JDK版本。
真正管理依赖的其实是spring-boot-dependencies,安装ctrl点击进去可以看到项目的
很多很多版本都在它的dependencyManagement中管理,很多很多基础依赖在它的dependencyManagement中管理,很多插件在它的pluginManagement中管理。
简而言之:【重要】如果要使用SpringBoot,需要通过
继承spring-boot-starter-parent,父项目为我们管理了很多依赖和插件。如果我们要使用依赖,只需要在自己项目的pom中引入即可,无需指定版本号。因为SpringBoot已经帮我们管理了版本号。比如我们要导入一个测试包,在我们自己项目的pom.xml中导入就行了
junit
junit
不需要导入版本号,因为父项目已经托管,除非你想更改默认版本。
在导入spring-boot-starter-web的时候,我们也指定了版本号。可以想象,依赖是由spring-boot-starter-parent来管理的,那么依赖的作用是什么呢? 顾名思义,就是SpringBoot与WEB环境集成的依赖。我们可以打开依赖的结构来看看
【重要】可以看到一个spring-boot-starter-web导入了很多其他的依赖,比如:Spring的基础依赖,SpringMVC的基础依赖,Jackson的基础依赖,日志基础依赖,Tomcat的依赖,自动配置依赖,所以这个 spring-boot-starter-web 导入了集成 web 环境所需的所有依赖项。你好像明白了什么?
【重要】顺便回答一个问题:为什么不需要部署Tomcat?因为spring-boot-starter-web已经导入了一个tomcat(SpringBoot嵌入式Tomcat),当我们启动main方法的时候,底层会启动嵌入式Tomcat,不再需要自己部署。
2.2.启动类分析
我们来分析一下启动类,也就是配置类。在学习Spring的Java Config之前,我们说过用一个Java类来代替Spring的xml配置作为配置文件,而SpringBoot使用的是Spring的Java Config配置。所以我们刚才的ApplicationConfig是一个配置类,它提供了一个main方法来启动项目,所以它也是一个启动类。有两点需要分析
注解:@SpringBootApplication 启动:SpringApplication.run(ApplicationConfig.class)
@SpringBootApplication 是 SpringBoot 提供的复合注解。它由三个注释组成。源码如下
//配置注解,该注解上又贴了一个 @Configuration
@SpringBootConfiguration
//开启自动配置
@EnableAutoConfiguration
//Spring IOC自动扫描
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@AliasFor(
annotation = EnableAutoConfiguration.class
)
Class[] exclude() default {};
@AliasFor(
annotation = EnableAutoConfiguration.class
)
String[] excludeName() default {};
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackages"
)
String[] scanBasePackages() default {};
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackageClasses"
)
Class[] scanBasePackageClasses() default {};
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
【重要】@SpringBootApplication 收录三个注解
【重要】也就是说标注@SpringBootApplication注解的类是一个Spring配置类,它还具有自动扫描IOC的能力,同时开启了SpringBoot的自动配置能力。
对于main方法中的SpringApplication.run,我们知道它的作用是启动程序。该方法会初始化SpringBoot环境,创建AnnotationConfigApplicationContext作为Spring的IOC容器类,然后执行容器类的刷新方法。刷新。加载bean、注册bean、实例化bean、自动配置、启动嵌入式Tomcat都在这个方法中。具体细节后面会讲,这里再讲。
2.3.小扩展
dependencyManagement 和依赖项
我们在SpringBoot的父项目中看到了dependencyManagement元素,那么这个元素中的依赖和放在dependencies中的依赖有什么区别呢?放在dependencies中的依赖可以直接使用。放置在dependencyManagement 中的依赖项仅用于声明或管理。依赖不能直接使用,需要在依赖中引入才能使用。
依赖管理有什么意义?它的意思是管理版本。通常在父项目中使用dependencyManagement来管理依赖,在子项目中导入依赖,然后导入不需要版本号,因为版本号交给父项目管理。 SpringBoot 就是这样做的。
包装是jar和war的区别
我们需要在pom中指定
罐子
标记项目的打包类型,可以指定四种类型
3.项目结构知识
SpringBoot项目的标准结构如下
代码存放在java目录下,resources目录包括
4.创建项目的三种方式
下面介绍几种创建SpringBoot项目的方法。第一种是手动创建,我们刚才已经演示过了,第二种是使用Spring官方提供的快捷方式网站
通过网站可以直接配置项目属性,添加依赖,然后点击generate生成项目,网站会下载一个基本的SpringBoot项目。
第三个是通过IDEA的Spring Initializr创建的,如下
配置项目
选择需要的jar包
点击下一步,项目创建成功
5.SpringBoot 特性总结
根据上面的Hello分析,我们可以总结出SpringBoot的一些特点
一个字,酷,但缺点是封装太深,需要花很多精力去了解它的封装过程。
文章就在这里,喜欢就点赞,喜欢就点赞,喜欢就点赞。