购物网站开发历史,湖南环达公路桥梁建设总公司网站,wordpress 翻页效果,国内wordpress视频主题学习目标 了解SpringBoot的优点 掌握SpringBoot项目的构建 掌握SpringBoot的单元测试和热部署 熟悉SpringBoot的自动化配置原理 熟悉SpringBoot的执行流程
随着互联网的兴起#xff0c;Spring势如破竹地占据了Java领域轻量级开发的王者之位。随着Java语言的发展以及市场…学习目标 了解SpringBoot的优点 掌握SpringBoot项目的构建 掌握SpringBoot的单元测试和热部署 熟悉SpringBoot的自动化配置原理 熟悉SpringBoot的执行流程
随着互联网的兴起Spring势如破竹地占据了Java领域轻量级开发的王者之位。随着Java语言的发展以及市场开发的需求Spring推出了新的SpringBoot框架。SpringBoot是Spring家族的一个子项目其设计初衷是为了简化Spring配置从而让用户可以轻松构建独立运行的程序并极大提高开发效率。接下来本章从SpringBoot开发入门知识入手带领大家正式进入SpringBoot框架的学习并对SpringBoot的相关原理进行深入分析。
1.1 SpringBoot概述
1.1.1 SpringBoot简介
在SpringBoot框架出现之前JavaEE开发最常用的框架是SPringle该框架开始于2003年它是由Rod Johnson创建的一个轻量级开源框架。Spring框架是为了解决企业应用开发的复杂性而创建的它的出现使得开发者无需开发重量级的EJB而是用过控制反转IOC和面向切面编程AOP的思想进行更轻松的企业应用开发取代了EJB臃肿低效的开发模式。
虽然Spring框架是轻量级的但它的配置确实重量级的。Spring的早期本本专注于xml配置开发一个程序需要配置各种xml配置文件。为了简化开发在Spring2.x本本开始引入少量的注解如ComponentService等。由于支持的注解不是很多且功能尚不完善所以只能辅助使用。
随着实际生产中敏捷开发的需要以及Spring注解的大量出现和功能改进到了Spring4.x本本基本可以脱离xml配置文件进行项目开发多数开发者也逐渐感受到了基于注解开发的便利因此在Spring中使用注解开发逐渐占据了主流地位。与此同时Pivotal团队在原有Spring框架的基础尚通过注解的方式进一步简化了Spring框架的使用并基于Spring框架开发了全新的SpringBoot框架于2014年4月正式推出了SpringBoot1.x版本同时在2018年3月又推出了SPringBoot2.0版本。SpringBoot2.x版本在SpringBoot1.x版本的基础尚进行了诸多功能的改进和扩展同时进行了大量的代码重构所以读者在学习开发过程中选择合适的版本也是非常重要的。我们推荐使用优化后的SpringBoot2.x版本。
SpringBoot框架本身并不是提供Spring框架的核心特性以及扩展性能知识用于快速敏捷的开发新一代基于Spring框架的应用并且在开发过程中大量使用“约定有限配置”的思想来拜托Spring框架中各种复杂的手动配置同时衍生出了Java Config取代传统xml配置文件的Java配置类这种有限的配置方式。也就是说SpringBoot并不是替代Spring框架的解决方案而是和Spring框架紧密结合用于提升Spring开发者体验的工具同时SpringBoot还集成了大量常用的第三方库配置例如JacksonJDBCRedisMail等。使用SpringBoot开发程序时几乎是开箱即用大部分SpringBoot应用只需少量配置就能完成相应的功能这一特性进一步促使开发者专注于业务逻辑的实现。
另外随着近几年微服务开发需求的迅速增加怎样快速简便的构建一个准生产环境的Spring应用也是摆在开发者面前的一个难题而SpringBoot框架的出现恰好完美的解决了这些问题同时其内部还简化了许多常用的第三方库配置使得微服务开发更加便利这也间接体现了SpringBoot框架的优势和学习SpringBoot的必要性。
1.1.2 SpringBoot的优点
相较于传统的Spring框架SpringBoot框架具有以下优点。 可快速构建独立的Spring应用 SpringBoot是一个依靠大量注解实现自动化配置的全新框架。在构建Spring应用时我们只需要添加相应的场景依赖SpringBoot就会根据添加的场景依赖自动进行配置在无须额外手动天机啊配置的情况下快速构建出一个独立的Spring应用。 直接嵌入tomcatjetty和undertow服务器无需配置war文件 传统的Spring应用部署时通常会将应用打成war包形式并部署到tomcatjetty或者undertow服务器中。SpringBoot框架内嵌了tomcatjetty和undertow服务区而且可以自动将项目打包并在项目运行时部署到服务器中。 通过依赖启动器简化构建配置 在SpringBoot项目构建过程中无须准备各种独立的jar文件只需要构建项目时根据开发场景需求选择对用的依赖启动器“starter”在引入的依赖启动器“starter”内部已经包含了对应卡法场景所需的依赖并会自动下载和拉取相关jar包。例如在web开发时只需在构建项目时选择对应的web场景依赖启动器spring-boot-starter-webSpringBoot项目便会自动导入spring-webmvcspring-webspring-boot-starter-tomcat等子依赖并自动下载和获取web开发需要的相关jar包。 自动化配置Spring和第三方库 SpringBoot充分考虑到与传统Spring框架以及其他第三方库融合的场景在提供了各种场景依赖启动器的基础上内部还默认提供了各种自动化配置类使用SpringBoot开发项目时一旦引入了某个场景 的依赖启动器SpringBoot内部提供的默认自动化配置类就会生效开发者无须手动在配置文件中进行相关配置除非开发者需要更改默认配置从而极大减少了开发人员的工作量提高了程序的开发效率。 提供生产就绪功能 SpringBoot提供了一些用于生产环境运行时的特性例如指标监控检查和外部化配置。其中指标和监控检查可以帮助运维人员在运行期间监控项目运行情况外部化配置可以使运维人员快速方便的进行外部化配置和部署工作。 极少的代码生成和xml配置 SpringBoot框架内部已经实现了与Spring以及其他常用第三方库的整合连接并提供了默认最优化的整合配置使用时基本尚不需要额外生成配置代码和xml配置文件。在需要自定义配置的情况下SpringBoot更加提倡使用JavaConfig替换传统的xml配置方式这样更加方便查看和管理。 虽然说SpringBoot有诸多的优点但SpringBoot也有一些缺点。例如SpringBoot入门较为简单但是深入理解和学习却有一定难度这是因为SpringBoot时在Spring框架的基础上推出的所以读者想要弄明白SpringBoot的底层运行机制有必要对Spring框架有一定的了解。
1.2 SpringBoot入门程序
通过上一节的学习相信读者已经对SpringBoot有了初步认识为了帮助读者快速的了解SpringBoot的基本用法下面我们快速开发一个基于SpringBoot框架的入门程序。
1.2.1 环境准备
为了方便入门程序的编写以及为后续章节提供对SpringBoot项目演示的支持在开发入门程序之前有必要对项目运行所需环境进行介绍并提前准备完成。 JDK环境 本书讲解使用SpringBoot2.1.3版本。根据SpringBoot官方文档说明SpringBoot版本要求JDK版本必须时JDK8以上 项目构建工具 在进行SpringBoot项目构建和案例演示时为了方便管理我们选择官方支持并且开发最常用的项目构建工具进行项目管理。SpringBoot2.1.3版本官方文档声明的第三方项目构建工具包括Maven3.3和Gradle(4.4),我们采用Maven3.6.1版本进行项目构建管理。 开发工具 在SpringBoot项目开发之前有必要选择一款优秀的开发工具。目前Java项目支持的常用开发工具包括SpringToolSuite(STS),Eclipse和IntelliJ IDEA等。其中IntelliJ IDEA时近几年比较流行的且业界评价最高的一款Java开发工具尤其在只能代码助手重构各类版本工具GitSVN等支持等方面的功能非常不错因此我们选择使用IDEA开发SpringBoot应用。
1.2.2 使用Maven方式构建SpringBoot项目
在创建项目之前我们需要先配置和搭建Maven工程的环境这一部分内容请看其他篇幅这里不再赘述。
准备号项目运行所需的环境后就可以使用idea开发工具搭建一个SpringBoot入门程序了。我们既可以使用Maven方式构建项目也可以使用Spring Initializr快捷方式构建项目。这里先介绍如果使用Maven方式构建SpringBoot项目具体步骤如下 初始化idea配置 进入idea开发软件的【file】-》【Setting】设置界面在左侧搜索【maven】关键字找到Maven设置选项在右侧对应的设置界面中进行Maven初始化设置 点击【file】-》【Project Structure】打开设置界面 2.创建Maven项目
点击【file】-》【new】-》【project】 点击【next】下一步 点击【next】下一步 点击【finish】创建好项目 3.添加SpringBoot依赖
打开当前项目下的pom.xml文件在该文件中添加构建SpringBoot项目和Web场景开发对应的依赖 !--引入SpringBoot依赖--parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.1.3.RELEASE/version/parentdependencies!--引入web场景依赖启动器--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversionRELEASE/version/dependency/dependencies
上述代码中parent标签中添加的spring-boot-starter-parent依赖时SpringBoot框架集成项目的同意父类管理依赖添加该依赖后就可以使用SpringBoot的相关特性version标签指定SpringBoot的版本号是2.1.3.RELEASEdependencies标签中添加的spring-boot-starter-web依赖是SpringBoot框架对Web开发场景集成支持的依赖启动器添加该依赖后就可以自动导入SpringMVC框架相关依赖进行Web开发了。
如果添加依赖后项目没有自动导入下载更新则可以使用以下方式 4.编写主程序启动类
在当前项目的java目录下创建包名在该包下创建主程序启动类
package com.yhh;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//标记该类为主程序启动类
SpringBootApplication
public class MyClass1 {public static void main(String[] args) {SpringApplication.run(MyClass1.class,args);}
}
SpringBootApplication注解是SpringBoot框架的核心注解该注解用于表明当前类是SpringBoot项目的主程序启动类SpringApplication.run(MyClass1.class,args);该方法是表示启动主程序类。
5.创建一个用于Web访问的Controller
在以上包下创建controller包在该包下创建一个请求控制器类并编写一个请求处理方法
package com.yhh.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;//控制器
RestController
public class MyController {GetMapping(/hello)public String hello(){return hello Spring Boot;}
}
RestController注解是一个组合注解等同于Controller和ResponseBody两个注解结合使用的效果。主要作用是将当前类作为控制层的组件添加到Spring容器中同时该类的方法无法返回JSP页面而且会返回JSON字符串。
GetMapping(/hello)注解等同于RequestMapping(methodRequestMethod.GET)注解主要作用是设置方法的访问路径并限定其访问方式为Get请求。hello()方法的请求处理路径为“/hello”并且方法的返回值是一个字符串对象。
6.运行项目
选择主程序进行运行 项目启动成功后在控制台上会发现SpringBoot项目默认启动端口号为8080此时可以在浏览器上访问“http://localhost:8080/hello”即在浏览器上可看到控制器hello()方法返回的数据显示出来。至此一个简单的SpringBoot项目就完成了。 1.2.3 使用Spring Initializr方式创建SpringBoot项目
除了可以使用Maven方式构建SpringBoot项目外还可以通过Spring Initializr方式快速构建SpringBoot项目。从本质上说Spring Initializr是一个Web应用它提供了一个基本的项目结构能够帮助我们快速构建一个基础的Spring Initializr项目。
1.创建SpringBoot项目
打开idea点击【file】-》【new】-》【project】-》【Spring Initializr】 点击【next】下一步 点击【next】下一步 点击【next】下一步 点击【finish】完成创建 即可idea会帮我们自动构建一个SpringBoot项目pom.xml文件中会配置一系列的依赖插件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.1.3.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.yhh/groupIdartifactIddemo/artifactIdversion0.0.1-SNAPSHOT/versionnamedemo/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version1.8/java.version/propertiesdependencies!--支持SpringBoot的web插件依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--支持SpringBoot测试的插件依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!--单元测试的插件依赖--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project
我们在主程序启动类中编写启动程序方法
package com.yhh;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
2.创建一个用于Web访问的Controller
在该项目的包下创建controller包在该包下创建控制器类并编写一个请求处理方法
package com.yhh.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class MyController {GetMapping(/hello)public String one(){return 你好 spring boot;}
}
3.运行项目
运行主程序启动类可以在浏览器上访问“http://localhost:8080/hello”即可看到信息显示。使用Spring Initializr方式构建项目完成。
1.3单元测试与热部署
1.3.1 单元测试
在实际开发中每当完成一个功能接口或业务方法的编写后通常都会借助单元测试验证该功能是否正确。SpringBoot对项目的单元测试提供了很好的支持在使用时需要提前在项目的pom.xml文件中添加Spring-boot-starter-test测试依赖启动器可以通过相关注解实现单元测试。这里以之前创建的项目为例对SpringBoot项目的单元测试进行使用演示。
1.添加Spring-boot-starter-test测试依赖启动器
在项目的pom.xml文件中添加Spring-boot-starter-test测试依赖启动器
!--支持SpringBoot测试的插件依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency
2.编写单元测试类和测试方法
在Spring Initializr方式创建的SpringBoot项目中有一个自动生成的单元测试类在该类中编写测试方法
package com.yhh;import com.yhh.controller.MyController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;/*** 使用SpringInitializr方式自动创建的主程序启动类对应的单元测试类*/
RunWith(SpringRunner.class)
SpringBootTest
public class DemoApplicationTests {//导入控制器AutowiredMyController controller;Testpublic void contextLoads() {}Testpublic void oneTest(){String one controller.one();System.out.println(one);}}SpringBootTest注解用于标记测试类并加载项目的上下文环境ApplicationContext
RunWith注解时一个测试类运行期用于加载SpringBoot测试注解SpringBootTest
Autowired注入控制层类的对象
并在oneTest()方法运行时调用
1.3.2 热部署
在开发过程中通常会对一段业务代码不断的修改测试在修改之后往往需要重启服务有些服务需要加载很久才能启动成功这种不必要的重复操作极大降低了程序开发效率。为此SpringBoot框架专门提供了进行热部署的依赖启动器用于进行项目热部署而无须开发人员手动重启项目。
1.添加spring-boot-devtools热部署依赖启动器
在SpringBoot项目进行热部署测试之前需要先在项目的pom.xml文件中添加spring-boot-devtools热部署依赖启动器。
!--热部署依赖启动器--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdversion2.1.3.RELEASE/version/dependency 2.idea工具热部署设置
选择idea工具界面的【file】-》【Settings】选项打开Compiler面板设置页面 在项目任意页面中使用组合键“CtrlShiftAlt/”打开Maintenance选项框选中并打开Registry界面 勾选上后将程序运行方式设置为自动编译
3.热部署效果测试
启动项目打开浏览器访问项目可看到控制器返回的内容当运行后我们改变返回的数据时不需要再重新运行idea会自动重新编译直接刷新浏览器再次访问即可。 1.4 SpringBoot原理分析
通过前面的学习我们对SpringBoot有了大致的了解。传统的Spring框架实现一个Web服务需要导入各种依赖JAR包然后编写对应的xml配置文件等相比而言SpringBoot显得更加方便快捷和高效。那么SpringBoot究竟如何做到这些呢下面分别针对SpringBoot框架的依赖管理自动配置和执行流程进行深入分析和讲解。
1.4.1 SpringBoot依赖管理
在SpringBoot入门程序中项目pom.xml文件有两个核心依赖分别时spring-boot-starter-parent和spring-boot-starter-web
1.spring-boot-starter-parent依赖
在项目中的pom.xml文件中找到spring-boot-starter-parent依赖
!--SpringBoot父项目依赖管理--parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.1.3.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parent
以上代码中将spring-boot-starter-parent依赖作为SpringBoot项目的同意父项目依赖管理并将项目版本号同意为2.1.3RELEASE该版本号根据实际开发需求时可以修改的。使用“Ctrl鼠标左键”进入并查看spring-boot-starter-parent底层源文件 再进入spring-boot-dependencies依赖 从源代码中可以看到SpringBoot底层中已经帮我们封装和集成了非常多的常用jar包这也就省去了我们Spring框架中的关联大量jar包和配置文件信息的麻烦。
2.spring-boot-starter-web依赖
spring-boot-starter-parent父依赖启动器的主要作用时进行版本统一管理那么项目运行依赖的JAR包时从何而来又是怎么管理的呢下面查看项目pom.xml文件中的spring-boot-starter-web依赖。
!--支持SpringBoot的web插件依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency 通过上述代码发现spring-boot-starter-web依赖启动器的主要作用时提供Web开发场景所需的底层所有依赖文件它对Web开发场景所需的依赖文件及逆行了同意管理。
正是如此在pom.xml中引入spring-boot-starter-web依赖启动器时就可以实现Web场景开发而不需要额外导入Tomcat服务器以及其他Web依赖文件等。当然这些引入的依赖文件的版本号还是有spring-boot-starter-parent父依赖进行统一管理。
这里需要说明的是SpringBoot官方并不是针对所有场景开发的技术框架都提供了依赖启动器例如MyBatisDruid等就没有提供依赖启动器如果需要使用我们在pom.xml文件中引入mybatis-spring-boot-starterdruid-spring-boot-starter这些第三方的依赖启动器切记要配置对应的版本号。
本章小结
本章主要对SpringBoot入门的一些基础知识进行了讲解。首先对SpringBoot概念和特点进行了介绍让读者快速了解SpringBoot框架的优势以及学习的必要性然后通过一个入门程序让读者快速体验到了SpringBoot项目开发的便捷其次讲解了SpringBoot项目开发中经常用到的单元测试和热部署最后深入分析了SpringBoot的原理包括依赖管理自动配置和执行流程。通过本章的学习大家应该对SpringBoot有一个初步认识为后续学习SpringBoot做好铺垫。
习题 填空题 Pivotal团队在原有 框架的基础上开发了全新的SpringBoot框架。 SpringBoot框架在开发过程中大量使用 的思想来拜托框架中各种复杂的手动配置 SpringBoot2.1.3版本要求Java 及以上版本的支持 Spring2.1.3版本框架官方声明支持的第三方项目构建工具包括有 和 。 判断题 Spring2.1.3版本要求Java7及以上版本的支持同时兼容Java11.( ) 使用Spring Initializr搭建SpringBoot项目可以选择任意不同的SpringBoot版本而无须修改。 使用Spring Initializr搭建的SpringBoot项目会默认生成项目启动类。 编写单元测试需要提前加入spring-boot-starter-test测试依赖启动器。 SpringBoot提供给了对所有第三方技术框架的整合支持和版本管理。 选择题 以下选项中哪些属于SpringBoot的优点 多选 A. 可快速构建独立的Spring应用 B.无须打包即可快速部署 C.提供依赖启动器简化构建配置 D.极大程度的自动化配置了Spring和第三方库 IDEA界面中【Configure】-》【Project Defaults】中的Project Structure主要作用是 A. 用于全局JDK初始化配置 B.用于全局Maven初始化设置 C.用于全局运行环境设置 D.以上都不对 下列关于SpringBoot项目各个包作用的说法正确的是 多选 A. resources下static中用于存放静态资源文件 B.resources下templates中用于存放模板文件 C.application.properties是项目的全局配置文件 D.以上都正确 下列关于SpringBoot依赖管理的说法正确的是 A. spring-boot-starter-parent父依赖可以为仙姑提供整合的子依赖文件 B.spring-boot-starter-parent父依赖可以为仙姑提供整合的子依赖版本管理 C.Web场景开发依赖spring-boot-starter-web可以针对所有Web场景开发 D.Web场景开发依赖spring-boot-starter-web的版本需要自行管理 下列关于SpringBoot自动配置原理的说法错误的是 A. SpringBootApplication只包含SpringBootConfigurationEnableAutoConfigurationCompenentScan3个注解 B.SpringBootConfiguration注解表示当前类为一个配置类并可以被组件扫描器扫描 C.EnableAutoConfiguration的作用是启动自动配置向容器中导入所有选中的自动配置类 D.ComponentScan注解的主要作用是扫描指定包及其子包下所有注解类文件作为Spring容器的组件使用