版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块一SpringBoot开发入门全套可编辑PPT课件
SpringBoot开发入门开发第一个SpringBoot程序SpringBoot核心配置和注解使用SpringBoot与数据访问SpringBoot实现Web开发SpringBoot缓存利器SpringBoot安全管理SpringBoot日志管理和接口文档综合案例——个人应学系统任务1认识SpringBoot1任务2工具安装与环境搭建2目录前言随着互联网的兴起,Spring势如破竹,占据着Java领域轻量级开发的王者地位。随着Java语言的发展及市场开发的需求,Spring推陈出新,推出了全新的SpringBoot框架。SpringBoot是Spring家族的一个子项目,其设计初衷是简化Spring配置,从而可以轻松构建独立运行的程序,并极大提高开发效率。接下来,本模块将从SpringBoot开发入门入手,带领大家正式进入SpringBoot框架的学习,并对SpringBoot框架的相关原理进行深入分析。学习目标知识目标:了解SpringBoot的基础知识。熟悉IDEA和JDK的安装。了解Maven和Gradle的基础知识。熟悉Maven的安装方法。能力目标:掌握SpringBoot框架的优势及学习的必要性。对SpringBoot有初步的认识。素质目标:基于学生认知规律,引导学生自主探索,动手实操。培养学生养成严谨的学习习惯,在进行程序开发时严谨细心。明德育才西方哲学家柏拉图曾说过这样一句话,良好的开端,等于成功的一半。这句话虽简单,却道出了成功的真谛。一个好的开始,往往能够引导事情走向成功。学习一门课程也是一样,只有在学习课程初期打下基础,才会对课程有一个更好的认识,学习才会越来越有趣味。总之,这句名言告诉我们要重视每一件事情的开端,只有在一开始就做好充分的准备和规划,才有可能在接下来的过程中少走弯路。让我们在生活和工作中时刻铭记这个道理,不断追求卓越和进步!认识SpringBoot任务1任务1认识SpringBoot任务描述SpringBoot是一个综合性的实战型应用技术框架,是在开发者已经完全掌握Spring、SSM开发框架整合基础之上实现的进一步的简化开发模型,不仅简单易学,而且属于当前企业应用开发中特别实用的技术之一。本任务将详细讲解SpringBoot是什么,Spring、SpringMVC和SpringBoot的基本概念、原理和结构,以及SpringBoot的优势和特点。任务实施在SpringBoot框架出现之前,JavaEE开发最常用的框架是Spring,该框架兴起于2003年,它是由RodJohnson创建的一个轻量级开源框架。Spring框架是为了解决企业应用开发的复杂性而创建的,它的出现使得开发者无须开发重量级的EnterpriseJavaBean(EJB),而是通过控制反转(IOC)和面向切面编程(AOP)的思想进行更轻松的企业应用开发,取代了EJB臃肿、低效的开发模式。虽然Spring框架是轻量级的,但它的配置是重量级的。早期版本的Spring专注于XML配置,开发一个程序需要配置各种XML文件。为了简化开发,在Spring2.x版本开始引入少量的注解,如@Component、@Service等,由于支持的注解不是很多且功能尚不完善,所以只能辅助使用。步骤1认识SpringBoot是什么任务实施随着实际生产中敏捷开发的需要,及Spring注解的大量出现和功能改进,到了Spring4.x版本基本可以脱离XML配置文件进行项目开发,多数开发者也逐渐感受到了基于注解开发的便利性,因此,在Spring中使用注解开发逐渐占据了主流地位。与此同时,Pivotal团队在原有Spring框架的基础上通过注解的方式进一步简化了Spring框架的使用,并基于Spring框架开发了全新的SpringBoot框架,于2014年4月正式推出了SpringBoot1.0版本,在2018年3月又推出了SpringBoot2.0版本。SpringBoot2.x版本在SpringBoot1.x版本的基础上进行了诸多功能的改进和扩展,同时进行了大量的代码重构,所以在学习开发过程中务必注意使用版本,同时也推荐使用优化后的SpringBoot2.x版本。任务实施SpringBoot框架本身并不提供Spring框架的核心特性及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用,并且在开发过程中大量使用“约定优先配置”(conventionoverconfiguration)的思想来摆脱Spring框架中各种复杂的手动配置,同时衍生出了JavaConfig(取代传统XML配置文件的Java配置类)这种优秀的配置方式。也就是说,SpringBoot并不是替代Spring框架的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具,同时SpringBoot还集成了大量常用的第三方库配置(如Jackson、JDBC、Redis、Mail等)。使用SpringBoot开发程序时,几乎是开箱即用(out-ofthe-box),大部分SpringBoot应用都只需少量的配置,这一特性更能促使开发者专注于业务逻辑的实现。任务实施另外,随着近几年微服务开发的需求和火爆,怎样快速、简便地构建一个准生产环境的Spring应用也是摆在开发者面前的一个难题,而SpringBoot框架的出现恰好完美地解决了这些问题,同时内部简化了许多常用的第三方库配置,使得微服务开发更加便利,这也间接体现了SpringBoot框架的优势和学习SpringBoot的必要性。任务实施1.基本概念步骤2掌握Spring、SpringMVC和SpringBoot的基本概念、原理和结构是一个开源的Java应用框架,为开发企业级应用提供了全面的解决方案。1核心思想包括控制反转(IOC)和面向切面编程(AOP),使得应用程序更加灵活和可维护。2支持Web层、业务层、Dao层和持久层的组件,实现了应用程序各层的解耦。3是一个轻量级的、分层的框架,适用于各种规模的Java应用开发。4Spring任务实施是Spring框架的一个模块,用于构建Web应用程序的MVC架构。1替代了传统的Servlet进行请求响应处理,使得开发Web应用程序更加简便。2支持表单处理、表单验证、文件上传、国际化等功能。3整合了Spring框架的诸多优点,如IOC和AOP,为Web应用开发提供了强大的支持。4SpringMVC任务实施SpringBoot旨在简化Spring应用的开发和部署流程。1适用于微服务架构,可以快速构建、运行和部署独立的、可扩展的服务。4内置了一系列开箱即用的依赖项,解决了项目中的常见依赖问题。2使得开发者可以更加专注于业务逻辑的实现,而无需过多关注底层框架的配置和搭建。5通过“约定大于配置”的方式,减少了大量的XML配置,使得开发者可以更快速地搭建和运行应用。3任务实施2.原理和结构1)Spring的原理和结构Spring为简化开发工作,封装了一系列的开箱即用的组件功能模块,包括SpringJDBC、SpringMVC、SpringSecurity、SpringAOP、SpringORM、SpringTest等。Spring的原理结构如图1-1-1所示。163任务实施(2)SpringMVC的原理和结构从图1-1-1中可以看出,SpringMVC属于SpringWeb中的一个功能模块(SpringWebMVC),是专门用来开发SpringWeb项目的一种MVC模式的技术框架实现。其原理结构如图1-1-2所示。任务实施3)SpringBoot的原理和结构SpringBoot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的XML配置,为更快、更高效地开发生态系统铺平了道路。SpringBoot的原理结构如图1-1-3所示。任务实施相较于传统的Spring框架,SpringBoot框架具有以下优势和特点。步骤3了解SpringBoot的优势和特点通过注解和自动化配置,快速构建独立的Spring应用。快速开发直接嵌入Tomcat、Jetty或Undertow,无需部署WAR包,可直接运行JAR包。内嵌服务器提供依赖启动器(starters),简化构建过程中的依赖管理和配置。内嵌服务器默认提供多种场景的自动化配置,减少手动配置工作量。自动化配置默认提供多种场景的自动化配置,减少手动配置工作量。生产就绪减少代码生成和XML配置,推荐使用JavaConfig进行配置管理。配置优化总结反思总体来说,SpringBoot简化了Spring应用程序的开发和部署,使开发者能够更专注于业务逻辑而不是配置。它适用于各种类型的应用程序,从传统的Web应用到微服务架构。工具安装与环境搭建任务2任务2工具安装与环境搭建任务描述在进行SpringBoot程序开发之前,需要进行工具安装与环境搭建,本任务主要进行了安装IDEA与JDK、了解Maven和Gradle、安装Maven等准备工作。任务实施1.下载IntelliJIDEA官方网站提供了两个版本:Community版和Ultimate版。Community版是免费的,适用于个人和非商业用途。而Ultimate版则需要付费购买,提供更多高级功能。初学者建议下载Community版,下载地址为/idea/download/。2.安装IDEA下载完成后,会有一个IntelliJIDEA安装包,双击打开下载的安装包,单击“Next”按钮,正式开始安装,如图1-2-1所示。步骤1安装IDEA与JDK任务实施任务实施设置IDEA的安装目录,建议不要安装在系统盘(通常C盘是系统盘),这里选择安装到D盘。自行选择需要的功能,若无特殊需求,按图1-2-2所示选择即可。任务实施图1-2-2中的安装属性配置选项说明如下。CreateDesktopShortcut:创建桌面快捷方式图标,建议选择64-bitlauncher。Updatecontextmenu:是否将从文件夹打开项目添加至鼠标右键,根据需要选择。CreateAssociations:关联文件格式,不推荐选择,使用如SublimeText、EditPlus等轻量级文本编辑器打开。Downloadandinstall32-bitJetBrainsRuntime:下载并安装JetBrains的JRE。如果已经安装了JRE,则无须选择此项。UpdatePATHvariable(restartneeded):是否将IDEA启动目录添加到环境变量中,即可以从命令行中启动IDEA,根据需要选择。任务实施选择开始菜单文件夹后,单击“Install”按钮等待安装,如图1-2-3所示。任务实施等待安装进度条达到100%后,单击“Finish”按钮,IDEA就安装完成了,如图1-2-4所示。可以选择“RunIntelliJIDEACommunityEdition”选项,则关闭此窗口后将运行IDEA。任务实施3.下载JDK打开下载地址/java/technologies/downloads/#java8,找到自己的计算机系统对应的JDK,单击下载链接,如图1-2-5所示。4.安装JDK(1)双击下载的exe文件,开始安装,单击“下一步”按钮,如图1-2-6所示。任务实施(2)更改JDK的默认安装目录,然后单击“下一步”按钮,如图1-2-7所示。任务实施(3)安装结束前,会弹出新窗口,提示安装JRE,如图1-2-8所示。任务实施(4)最后弹窗告知已安装成功,如图1-2-9所示。小提示·不建议安装到系统盘。一般软件默认安装到C盘,C盘是系统盘,安装太多软件系统会卡顿(不仅JDK的安装如此,一些其他软件也不建议安装在C盘)。·不建议安装到中文目录或带空格的目录中。很多国外开发的软件不识别中文路径,安装在中文目录或带空格的目录中会报错,以后安装的软件最好也是如此。任务实施5.配置JDK环境变量(1)在桌面右击“计算机”图标,并选择“属性”选项,在打开的窗口中找到“高级系统设置”链接,如图1-2-10所示。任务实施(2)单击“高级系统设置”链接,打开“系统属性”对话框,在“高级”选项卡下单击“环境变量”按钮,如图1-2-11所示。任务实施(3)选择系统变量,单击“新建”按钮,输入变量名Java_HOME,变量值为JDK的bin目录所在路径,如图1-2-12所示。任务实施(4)选择系统变量,找到Path变量,双击,单击“新建”按钮,输入%JAVA_HOME%\bin,然后单击“确定”按钮,如图1-2-13所示。任务实施(5)打开控制台窗口,执行java-version命令,若显示当前Java版本号,则代表环境变量配置完成,如图1-2-14所示。任务实施1.概念Maven是一种基于XML的构建工具,用于管理Java项目的构建、依赖关系和发布。Maven使用传递性依赖关系解决方案,可使开发人员更轻松地管理项目依赖关系和版本。Maven使用常见的“坐标”表示法来唯一标识依赖项。Gradle是一种基于DSL(领域特定语言)的构建工具,它将构建脚本(Groovy或Kotlin)编写为构建配置文件。Gradle的设计目标是可配置性和灵活性,它通过使用插件提供灵活的构建定制选项。步骤2了解Maven和Gradl任务实施2.构建流程和生命周期Maven拥有三个标准的生命周期(lifecycle),最小的运行单元是目标(goal),并且插件可以把自己的目标绑定在生命周期的某个阶段(phase)上。Gradle没有显示的生命周期,最小的运行单元是任务(task),任务之间可以相互依赖并且可以动态地创建任务。3.包管理和传递性依赖Maven的包来源于中央仓库,一个包由groupId/artifactId/version确定唯一坐标,并且Maven的包拥有传递性依赖(当某个包的使用依赖于其他包时,会自动导入所有的依赖包)。Gradle使用Ivy的构件系统,是Maven的构件系统的超集。本书采用ApacheMaven3.8.x版本进行项目构建管理。任务实施1.下载Maven打开Maven仓库官网:/download.cgi,下载apache-maven-3.8.6-bin.zip安装包,如图1-2-15所示。2.解压Maven并修改配置文件(1)将下载的安装包解压到指定路径,如图1-2-16所示。注意:一定不能是中文路径。(2)在当前目录下创建MavenRepository文件夹,用作Maven仓库。需要注意的是,自定义的Maven仓库路径不要设置到C盘。步骤3安装Maven任务实施任务实施(3)修改settings.xml配置文件,配置Maven仓库(MavenRepository文件夹)的绝对路径和阿里云Maven公共仓库,如图1-2-17~图1-2-19所示。①找到并打开settings.xml文件。②复制MavenRepository文件夹绝对路径,配置Maven仓库(注意复制的路径是“\”,要改为“/”),如图1-2-18所示。任务实施③配置阿里云Maven公共仓库,如图1-2-19所示。任务实施3.配置环境变量(1)新增系统变量MAVEN_HOME,如图1-2-20所示。任务实施(2)双击path系统变量,单击“新建”按钮,新增环境变量%MAVEN_HOME%\bin,如图1-2-21所示。总结反思安装IDEA与JDK是Java开发的第一步。了解Maven和Gradle有助于更好地管理和构建Java项目。安装Maven是在Java项目中使用依赖管理和构建工具的关键步骤。这些工具将成为日常Java开发不可或缺的一部分。模块小结本模块主要了解SpringBoot开发入门的一些基础知识。首先对SpringBoot的概念和特点进行了讲解,让读者快速了解SpringBoot框架的优势及学习的必要性;然后进行了SpringBoot程序开发前的工具安装与环境搭建工作。通过本模块的学习,相信读者可以对SpringBoot有一个初步认识,为后续学习SpringBoot做好铺垫。课后习题一、选择题1.(多选)以下选项中,(
)属于SpringBoot的优点。A.可快速构建独立的Spring应用B.无须打包即可快速部署C.提供依赖启动器简化构建配置D.极大程度地自动化配置Spring和第三方库2.在IDEA界面中,Configure→ProjectDefaults中的ProjectStructure的主要作用是(
)。A.用于全局JDK初始化设置B.用于全局Maven初始化设置C.用于全局运行环境设置D.以上都不对课后习题一、选择题3.(多选)下列关于SpringBoot项目各个包作用的说法,正确的是(
)。A.resources下的static中用于存放静态资源文件B.resources下的templates中用于存放模板文件C.perties是项目的全局配置文件D.以上都正确二、操作题根据任务2的任务实施步骤进行工具安装与环境搭建。非常感谢您的观看
模块二开发第一个SpringBoot程序创建SpringBoot项目1实现单元测试与热部署2SpringBoot的依赖管理和自动配置3目录前言模块1简单介绍了SpringBoot的基础知识,本模块将带领读者开发第一个SpringBoot程序,体会SpringBoot惊人的配置简化及单元测试与热部署、依赖管理和自动配置等。学习目标知识目标:掌握构建SpringBoot项目的3种方法。了解SpringBoot的单元测试与热部署。熟悉SpringBoot的依赖管理、自动配置和启动原理。能力目标:掌握SpringBoot项目的创建方法。掌握SpringBoot项目的测试方法。掌握SpringBoot项目的依赖管理与自动配置的使用。素质目标:以软件公司编码规范和Java工程师感言为主题进行职业规范教育,培养学生养成规范的编码习惯。培养学生坚持、严谨、诚信、合作、精益求精等程序员工匠精神。明德育才在实验过程中,难免会遇到代码调试或者安装软件失败等问题,但是我们应该具有不怕困难、勇于挑战的勇气。2023年在杭州亚运会游泳项目女子1500米自由泳决赛中,比赛最后冲刺阶段,运动员们相继向终点进行最后的加速。不过本场比赛的一位越南选手不巧被身边的竞争对手拉开较大身位,眼看着前方的选手纷纷抵达终点,十来分钟前还充满呐喊声和水浪声的泳池变得安静下来,此刻只剩她一人在向终点发起“孤独冲刺”。游泳赛场上,往往没有人会记住第二名,更别说最后一名。不过现场观看本场比赛的观众并没有忽视这位越南选手最后的努力,当她在空荡的泳池进行最后冲刺时,观众席向她送来了一声声加油助威声,为这位选手送上鼓励。所以当我们遇到困难时应该有勇于面对的勇气和自信。创建SpringBoot项目任务1任务1认识SpringBoot任务描述本任务要求读者搭建一个快速开发SpringBoot项目的工程环境,包括使用官网构建SpringBoot项目、使用Maven方式构建SpringBoot项目和使用SpringInitializr方式构建SpringBoot项目,在构建项目后再编写简单的代码程序。任务实施(1)在浏览器中输入网址https://start.spring.io/并打开,进入Spring官网。(2)在Spring官网中填写要创建项目的基本信息并单击“GENERATE”按钮,如图2-1-1所示。步骤1使用官网构建SpringBoot项目任务实施小提示:在Spring官网创建SpringBoot项目时,各选项解释如下。Project:构建工具,选择Maven。Language:开发语言,选择Java。SpringBoot:SpringBoot版本,选择一个稳定的版本。ProjectMetadata:配置项目元信息,如组织名、项目名、包名、打包方式。任务实施(3)在IDEA中选择“File”→“Open”选项,将下载的压缩包解压后用IDEA打开,如图2-1-2所示。任务实施(4)在打开的“Open”窗口中选择下载的demo02-1项目,单击“OK”按钮,打开demo02-1项目,项目结构如图2-1-3所示。(5)至此就完成了使用官网构建SpringBoot项目。任务实施步骤2使用Maven方式构建SpringBoot项目(1)打开IDEA,选择“File”→“New”→“Project”选项,在弹出的“NewProject”界面左侧选择“Maven”选项,最后单击“Next”按钮,如图2-1-4所示。任务实施注意:在Maven界面中需要在“ProjectSDK”文本框中选择本计算机中配置好的JDK。(2)在创建Maven的窗口中填写项目的基本信息,在“Name”文本框中填写项目名称为“demo02-2”,在“Location”文本框中填写项目保存地址,此处将地址设置为“D:\jobs\education\demo02-2”,最后单击“Finish”按钮,如图2-1-5所示。任务实施小提示:使用Maven方式创建SpringBoot项目时,各选项解释如下。Name:项目名称。Location:项目保存地址。任务实施(3)在pom.xml文件中添加构建SpringBoot项目和Web场景开发对应的依赖,具体代码如下。任务实施保存上述代码后,IDEA会自动下载对应的依赖,下载完成后可在ExternalLibrarles中查看,如图2-1-6所示。任务实施(4)编写主程序启动类,在demo02-2项目的Java路径下创建名为com.example.demo02的包,在该包下创建demoApplication.java文件,具体代码如下。(5)至此就完成了使用Maven方式构建SpringBoot项目。任务实施步骤3使用SpringInitializr方式构建SpringBoot项目(1)打开IDEA,选择“File”→“New”→“Project”选项,在弹出的“NewProject”界面左侧选择“SpringInitializr”选项,最后单击“Next”按钮,如图2-1-7所示。任务实施小提示:使用SpringInitializr方式创建SpringBoot项目时,各选项解释如下。Name:项目名称。Location:项目保存地址。Language:开发语言。Type:构建工具。Group:组织名。Artifact:项目的标识符。Packagename:包名,默认为Group+Artifact。Java:Java版本。packaging:打包方式。任务实施(2)单击“Next”按钮后,在对话框中选择一个稳定的SpringBoot版本“2.7.15”,搜索初始化的组件“web”,选择“SpringWeb”复选框,然后单击“Finish”按钮,如图2-1-8所示。任务实施(3)至此就完成了使用SpringInitializr方式构建SpringBoot项目。(4)相比使用Maven方式,使用SpringInitializr方式创建SpringBoot项目后会自动生成主程序启动类,如图2-1-9所示。任务实施步骤4编写简单代码下面编写一个简单的应用来测试SpringBoot运行的效果。以demo02-3项目为例,在com.example.demo023包下新建一个controller包,并添加HelloController类,定义hello方法用于接收请求并响应,具体代码如下。任务实施运行Demo023Application主启动类,在控制台可以看到默认端口号为8080,如图2-1-10所示。任务实施打开浏览器,访问http://localhost:8080/hello请求hello()方法,在浏览器中可以看到“helloSpringBoot”,如图2-1-11所示。任务实施小提示:使用@RestController后,Controller中所有被@RequestMapping标注的方法相当于添加了@ResponseBody注解,会将方法的返回值序列化为JSON响应给客户端。总结反思本任务主要讲述了如何使用IDEA创建简单的SpringBoot项目。SpringBoot本身是基于SpringFramework之上封装的更易于开发的“脚手架”,借助SpringBoot约定大于配置的原则,在创建项目时,只需要极少量的配置就可以整合所需的开发场景。实现单元测试与热部署任务2任务2实现单元测试与热部署任务描述在实际应用开发过程中,发生业务变化、代码错误等时,难免要修改程序。为了正确运行出修改的结果,往往需要重启应用,否则,将不能看到修改后的效果。这一启动过程是非常浪费时间的,导致开发效率低,因此,有必要学习SpringBoot开发的热部署,自动实现应用的重启和部署,大大提高开发和调试效率。任务实施SpringBoot为测试提供了一个名为spring-boot-starter-test的依赖,使用STS创建SpringBoot应用时将自动添加上述依赖。它主要提供了以下测试库。步骤1实现单元测试任务实施接着以demo02-3项目为例对SpringBoot项目的单元测试进行使用演示,具体步骤如下。1.添加spring-boot-starter-test测试依赖启动器在项目的pom.xml文件中添加spring-boot-starter-test测试依赖启动器,具体代码如下。任务实施2.编写单元测试类和测试方法在项目中添加测试依赖启动器后,可以编写SpringBoot项目中相关方法对应的单元测试。如果是使用SpringInitializr方式搭建的SpringBoot项目,会在src.test.java测试目录下自动创建与项目主程序启动类对应的单元测试类。例如,demo02-3项目的Demo023ApplicationTests是自动生成的单元测试类,具体代码如下。任务实施小提示:@SpringBootTest注解用于标记该类为测试类,并加载项目的ApplicationContext上下文环境。此项目默认使用的是JUnit5。如果使用的是JUnit4,则需要添加@RunWith(SpringRunner.class)到测试类中,否则,注释将被忽略。在单元测试类中添加HelloController类中hello()请求控制方法对应的单元测试方法,具体代码如下。任务实施上述代码先使用@Autowired注解注入HelloController实例对象,然后在helloControllerTest()方法中调用HelloController类中对应的请求控制方法hello(),并输出打印结果。选中单元测试方法helloControllerTest()右击,选择“Run‘helloControllerTest()’”选项启动测试方法,此时控制台的打印信息如图2-2-1所示。从图2-2-1中可以看出,控制台打印出了“helloSpringBoot”信息,说明控制类HelloController中编写的hello()方法正确,且单元测试方法执行成功。任务实施下面在demo02-3项目的基础上讲解如何进行热部署,具体步骤如下。1.添加spring-boot-devtools热部署依赖启动器在项目的pom.xml文件中添加spring-boot-devtools热部署依赖启动器,具体代码如下。任务实施2.在setting配置开启静态文件自动编译在IDEA中选择“File”→“Settings”选项,打开Compiler设置界面,选择“Buildprojectautomatically”复选框,单击“Apply”→“OK”按钮保存设置,如图2-2-2所示。任务实施然后在“AdvancedSettings”选项中选择自动编译(动态),如图2-2-3所示。任务实施3.开启IDEA的热部署策略单击“EditConfigurations”链接,在打开的界面中选择“Modifyoptions”→“On‘Update’action”→“Updateclassesandresources”选项,单击“Apply”→“OK”按钮保存设置,如图2-2-4所示。任务实施4.热部署效果测试重启IDEA,启动demo02-3项目,为了测试配置的热部署是否有效,接下来,在不关闭当前项目的情况下将HelloController类中的请求处理方法hello()的返回值修改为“helloSpringBoot!!!”并保存,稍加等待,查看控制台信息,会发现项目能够自动构建和编译,说明项目热部署生效。刷新浏览器,可以看到发生的变化,如图2-2-5所示。至此项目热部署配置成功。总结反思单元测试帮助人们保证应用的各个模块能够正常工作,并且在持续集成和发布的过程中不会因为某个模块的改动而引发问题。热部署通过控制器项目的ClassLoader来实现。在修改代码文件后,IDEA会自动重新编译并将修改后的Class文件复制到热部署目录,然后热部署机制将这些修改的Class文件加载到ClassLoader中。SpringBoot的依赖管理和自动配置任务3任务3SpringBoot的依赖管理和自动配置任务描述在第一次搭建SpringBoot环境时,可能会觉得非常简单,无需各种配置文件与繁杂的pom坐标,一个main方法就能将项目启动。接下来本任务将要求掌握SpringBoot框架的依赖管理、自动配置和启动原理。任务实施SpringBoot项目简化了Spring应用的初始搭建及开发过程,同样对jar的依赖管理也有一套标准。创建好SpringBoot项目模板后可以看到pom.xml文件,用于对需要的jar进行依赖管理,在将项目打包之后,由于项目包包含Tomcat,可以直接使用“java-jar项目包”命令来运行项目。这些都依赖于SpringBoot的项目管理。步骤1依赖管理
任务实施1.依赖管理结构打开demo02-3项目,查看pom.xml文件,pom.xml文件的具体代码如下。任务实施任务实施任务实施在pom.xml中可以看到项目的父级依赖是spring-boot-starter-parent,按住Ctrl键的同时单击,进入spring-boot-starter-parent,可以看到另外一个父级依赖spring-boot-dependencies。它们的结构如图2-3-1所示。任务实施2.父依赖spring-boot-starter-parentpring-boot-starter-parent中主要有4大标签,分别为父级标签、properties标签、resource标签和plugin插件信息。1)父级标签首先查看父级标签,具体代码如下。任务实施接着查看spring-boot-dependencies底层源文件,具体代码如下。任务实施从spring-boot-dependencies底层源文件可以看出,该文件通过<properties>标签对一些常用技术框架的依赖文件进行了统一版本号管理。例如,Spring、Tomcat等都有与当前的SpringBoot版本相匹配的版本,这也是pom.xml引入依赖文件不需要标注依赖文件版本号的原因。需要说明的是,如果pom.xml引入的依赖文件不是spring-boot-starter-parent管理的,那么在pom.xml引入依赖文件时需要使用<version>标签指定依赖文件的版本号。2)properties标签此标签的作用是指定Java的编译版本,编译编码的信息,具体代码如下。任务实施(3)resource标签此标签的作用是指定SpringBoot项目的配置文件可以是yml、yaml、properties3种格式的文件,在resource下或其他位置,具体代码如下。任务实施(4)plugin插件信息该插件可以使Maven直接将依赖的jar打包,可以使用“java-jar”启动项目,具体代码如下。任务实施3.spring-boot-starter-web依赖当需要web模块时,只需引入spring-boot-starter-web依赖即可。spring-boot-starter-web依赖文件源码如下。任务实施从上述代码可以发现,spring-boot-starter-web依赖启动器的主要作用是提供Web开发场景所需的底层所有依赖文件,它对Web开发场景所需的依赖文件进行了统一管理。正是如此,在pom.xml中引入spring-boot-starter-web依赖启动器时,就可以实现Web场景开发,而不需要额外导入Tomcat服务器及其他Web依赖文件等。当然,这些引入的依赖文件的版本号还是由spring-boot-starter-parent父依赖进行统一管理。任务实施除了提供上述介绍的Web依赖启动器外,SpringBoot官网文档还有很多启动器,不需要人们再去找对应的jar和处理版本兼容问题。规范是spring-boot-starter-*,如图2-3-2所示。任务实施在SpringBoot项目中不需要配置复杂的配置文件就可以直接启动项目,这一切取决于SpringBoot的自动配置。下面详细讲解SpringBoot项目的3个重要注解。打开启动类Demo023Application,在使用main()启动SpringBoot时,会有一个注解@SpringBootApplication,按住Ctrl键的同时单击进入该注解,可以发现在该注解的类中有7个注解,其中比较重要的注解为@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan,如图2-3-3所示。步骤2自动配置
任务实施小提示:·@SpringBootConfiguration:按住Ctrl键的同时单击进入该注解的类包,可以发现底层是Configuration注解,其实就是支持使用JavaConfig的方式来进行配置(使用Configuration配置类等同于XML文件)。·@EnableAutoConfiguration:开启自动配置功能(后文详解)。·@ComponentScan:扫描注解,默认是扫描当前类下的package。将@Controller/@Service/@Component/@Repository等注解加载到IOC容器中。任务实施1.@EnableAutoConfiguration注解@EnableAutoConfiguration注解表示开启自动配置功能,该注解是SpringBoot框架最重要的注解,也是实现自动化配置的注解。按住Ctrl键的同时单击进入该注解的类包,可以看到该类包有6个注解,其中两个比较重要的注解为@AutoConfigurationPackage和@Import,如图2-3-4所示。任务实施(1)@AutoConfigurationPackage注解查看@AutoConfigurationPackage注解内部源码信息,具体代码如下。任务实施可以发现,@AutoConfigurationPackage注解依靠的还是@Import注解,按住Ctrl键的同时单击进入Registrar.class查看,具体代码如下。任务实施从上述源码可以看出,在Registrar类中有一个registerBeanDefinitions()方法,使用Debug模式启动项目,会发现上述代码中加粗部分获取的是项目主程序启动类所在的目录com.itheima。也就是说,@AutoConfigurationPackage注解的主要作用是获取项目主程序启动类所在根目录,从而指定后续组件扫描器要扫描的包位置。因此,在定义项目包结构时,要求定义的包结构非常规范,项目主程序启动类要定义在最外层的根目录位置,然后在根目录位置内部建立子包和类进行业务开发,这样才能够保证定义的类能够被组件扫描器扫描。任务实施2)@Import注解在@AutoConfigurationPackage注解内部源码的@Import(AutoConfigurationImportSelector.class)这句代码上,按住Ctrl键的同时单击进入AutoConfigurationImportSelector.class,如图2-3-5所示。任务实施按住Ctrl键的同时单击进入getCandidateConfigurations方法,查看配置信息的来源,具体代码如下。任务实施从上述代码中看到的配置信息是通过SpringFactoriesLoader来加载的,还没看到关键信息,继续进入LoadFactoryNames方法,如图2-3-6所示。可以看到,Spring启动时会扫描所有jar路径下的META-INF/spring.factories,将其文件包装成Properties对象。从Properties对象获取到key值为EnableAutoConfiguration的数据,然后添加到容器中。查看autoconfigure的jar包下的META-INF/spring.factories文件就能看到这些指定的自动装配类全类名,如图2-3-7所示。任务实施每个SpringBoot项目都有一个主程序启动类,在主程序启动类中有一个启动项目的main()方法,在该方法中通过执行SpringApplication.run()即可启动整个SpringBoot程序。那么SpringApplication.run()方法到底是如何做到启动SpringBoot项目的呢?下面查看run()方法内部的源码,具体代码如下。步骤2掌握启动原理
任务实施从上述源码可以看出,SpringApplication.run()方法内部执行了两个操作,分别是SpringApplication实例的初始化创建和调用run()启动项目,这两个阶段的实现具体说明如下。1.SpringApplication实例的初始化创建查看SpringApplication实例对象初始化创建的源码信息,具体代码如下。任务实施从上述源码可以看出,SpringApplication的初始化过程主要包括4部分,具体说明如下。用于判断当前webApplicationType应用的类型deduceFromClasspath()方法用于查看Classpath类路径下是否存在某个特征类,从而判断当前webApplicationType类型是SERVLET应用(Spring5之前的传统MVC应用)还是REACTIVE应用(Spring5开始出现的WebFlux交互式应用)。1)this.webApplicationType=WebApplicationType.deduceFromClasspath()用于SpringApplication应用的初始化器设置。在初始化器设置过程中,会使用Spring类加载器SpringFactoriesLoader从META-INF/spring.factories类路径下的META-INF下的spring.factories文件中获取所有可用的应用初始化器类ApplicationContextInitializer。2)this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class))任务实施用于SpringApplication应用的监听器设置。监听器设置的过程与上一步初始化器设置的过程基本一样,也是使用SpringFactoriesLoader从META-INF/spring.factories类路径下的META-INF下的spring.factories文件中获取所有可用的监听器类ApplicationListener。3)this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class))用于推断并设置项目main()方法启动的主程序启动类。4)this.mainApplicationClass=this.deduceMainApplicationClass()任务实施2.项目的初始化启动分析完(newSpringApplication(primarySources)).run(args)源码前一部分SpringApplication实例对象的初始化创建后,查看run(args)方法执行的项目初始化启动过程,具体代码如下。任务实施任务实施任务实施任务实施从上述源码可以看出,项目初始化启动过程大致包括以下部分。(2)(1)(1)this.getRunListeners(args)和listeners.starting()方法主要用于获取SpringApplication实例初始化过程中初始化的SpringApplicationRunListener监听器并运行。(2)this.prepareEnvironment(listeners,applicationArguments)方法主要用于对项目运行环境进行预设置,同时通过this.configureIgnoreBeanInfo(environment)方法排除一些不需要的运行环境。任务实施(4)(3)(3)this.createApplicationContext()方法及其下面加粗部分代码的主要作用是对项目应用上下文ApplicationContext进行预配置,包括先创建应用上下文环境ApplicationContext,接着使用之前初始化设置的context(应用上下文环境)、environment(项目运行环境)、listeners(运行监听器)、applicationArguments(项目参数)和printedBanner(项目图标信息)进行应用上下文的组装配置,并刷新配置。(4)listeners.started(context)方法用于运行监听器SpringApplicationRunListener启动配置好的应用上下文ApplicationContext任务实施(6)(5)(5)this.callRunners(context,applicationArguments)方法用于调用项目中自定义的执行器XxxRunner类,使得在项目启动完成后立即执行一些特定程序。其中,SpringBoot提供的执行器接口有ApplicationRunner和CommandLineRunner两种,在使用时只需要自定义一个执行器类实现其中一个接口并重写对应的run()方法接口,然后SpringBoot项目启动后会立即执行这些特定程序。(6)listeners.running(context)方法表示在前面一切初始化启动都没有问题的情况下,使用运行监听器SpringApplicationRunListener持续运行配置好的应用上下文ApplicationContext,这样整个SpringBoot项目就正式启动完成了。与此同时,经过初始化封装设置的应用上下文ApplicationContext也处于活跃状态。任务实施至此,关于SpringBoot执行流程中项目的初始化启动已经分析完毕。经过上面对项目启动过程中两阶段源码的详细分析,相信读者对SpringBoot的执行流程已经有了大概的认识,虽然大部分内容都较为复杂,但在学习过程中只要了解源码中的部分重要内容即可。下面通过一个SpringBoot执行流程图来让读者更清晰地认识SpringBoot的整体执行流程和主要启动阶段,如图2-3-8所示。需要说明的是,图2-3-8所示的SpringBoot执行流程是基于本书编写时的最新稳定版本SpringBoot2.1.3为例进行分析讲解的,不同版本的内部执行过程和源码实现细节略有不同,读者要学会借助源码分析对应版本程序的执行流程。总结反思简化开发者的工作量,减少引导和配置的复杂性,从而允许开发者更专注于开发业务逻辑。模块小结本模块主要讲解了开发第一个SpringBoot程序。首先讲解了3种创建SpringBoot项目的方式,包括使用官网构建SpringBoot项目、使用Maven方式构建SpringBoot项目和使用SpringInitializr方式构建SpringBoot项目;然后进行了SpringBoot项目的单元测试和热部署;最后讲解了SpringBoot程序中的依赖管理、自动配置和启动原理。通过本模块的学习,读者可以对SpringBoot程序的创建与底层运行原理有一个基本的了解。课后习题一、填空题1.Pivotal团队在原有_________框架的基础上开发了全新的SpringBoot框架。2.SpringBoot框架在开发过程中大量使用_________的思想来摆脱Spring框架中各种复杂的手动配置。3.SpringBoot是于__________年发布的。4.SpringBoot的自动配置是通过____________来实现的。5.SpringBoot的依赖管理可以通过在pom.xml文件中添加_______________来引入所需的依赖。课后习题二、判断题1.创建SpringBoot项目有两种方法,一种是通过start.spring.io进行创建,另一种是通过创建Maven项目进行手动设置SpringBoot依赖。(
)2.SpringBoot内嵌了一个Tomcat容器。(
)3.SpringBoot是基于约定优于配置的理念开发的。(
)4.编写单元测试需要提前加入spring-boot-starter-test测试依赖启动器。(
)5.SpringBoot项目需要独立的容器来运行。(
)课后习题三、选择题1.注解@SpringBootApplication是一个复合注解,不包含于此注解功能的注解是(
)。A.@ComponentScan
B.@SpringBootTestC.@SpringBootConfiguration
D.@EnableAutoConfiguration2.关于@Import注解的说法错误的是(
)。A.@Import注解是替换了之前的import标签B.@Import注解可以导入配置和把某个类型的对象注入容器中C.@Import注解也可以动态地注入D.@Import注解动态注入只有一种方式,即实现ImportSelector接口课后习题三、选择题3.(多选)下列关于SpringBoot项目各个包作用的说法,正确的是(
)。A.resources下static中用于存放静态资源文件B.resources下templates中用于存放模板文件C.perties是项目的全局配置文件D.以上都正确4.下列关于SpringBoot依赖管理的说法,正确的是(
)。A.spring-boot-starter-parent父依赖可以为项目提供整合的子依赖文件B.spring-boot-starter-parent父依赖可以为项目提供整合的子依赖版本管理C.Web场景开发依赖spring-boot-starter-web可以针对所有Web场景开发D.Web场景开发依赖spring-boot-starter-web的版本需要自行管理课后习题三、选择题5.下列关于SpringBoot自动配置原理的说法,错误的是(
)。A.@SpringBootApplication只包含@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan3个注解B.@SpringBootConfiguration注解表示当前类为一个配置类且可以被组件扫描器扫描C.@EnableAutoConfiguration的作用是启动自动配置,向容器中导入所有选中的自动配置类D.@ComponentScan注解的主要作用是扫描指定包及其子包下所有注解类文件作为Spring容器的组件使用非常感谢您的观看
模块三SpringBoot核心配置和注解使用属性文件和配置项的使用1配置加载原理
2自定义配置3外部化配置的方式4目录多环境配置5前言SpringBoot核心配置和注解使用的意义在于简化Spring功能的配置,使开发人员能够更快速、更高效地进行开发。通过使用注解,开发人员可以隐式地配置Spring功能。例如,@Autowired、@Bean、@Component等注解,这些注解可以简化XML文件的配置,提高开发效率。同时,SpringBoot还具备类型安全的特点,通过在Java文件中显式配置,可以避免因为配置错误而导致的潜在问题。本模块将详细讲解SpringBoot核心配置和注解使用。学习目标知识目标:了解属性文件和配置项的使用。学习并理解配置加载原理。掌握自定义配置和外部化配置的方式。熟悉多环境配置。能力目标:掌握SpringBoot核心配置的使用。掌握SpringBoot核心注解的使用。素质目标:培养学生在技术上遇到难题时集思广益、团结合作的意识。培育学生高度责任感、持之以恒、勇于创新的“大国工匠”精神。明德育才学习不应该仅限于书本,还应该学会查找课外知识。毛主席曾说:“在探索中国前进的发展道路上不应该生搬硬套。”当书中的知识点不足以解决问题时,我们应该主动行动起来,学会利用网络知识或者小组讨论解决问题。属性文件和配置项的使用任务1任务1属性文件和配置项的使用任务描述SpringBoot通过使用属性文件和配置项,使得开发人员可以灵活地配置和管理应用程序,同时也提供了许多内置的功能和工具,使开发人员能够更快速、更高效地构建和管理应用程序。本任务将详细讲解Properties配置文件和YAML配置文件的区别。任务实施perties是基于属性文件的配置格式,支持key-value形式的键值对。在SpringBoot中,可以在perties文件中配置各种应用程序属性,如端口号、数据库连接、日志级别等。perties示例的具体代码如下。步骤1详解Properties配置文件上面的示例配置了应用程序的端口号为8080,数据库连接为mysql数据库,日志级别为DEBUG等。任务实施(3)在IDEA中选择“File”→“Open”选项,将下载的压缩包解压后用IDEA打开,如图2-1-2所示。任务实施application.yml是基于YAML格式的配置文件,支持层级结构的配置形式,可以更加清晰地表达配置项之间的关系。与perties相比,application.yml更易读和易维护,也更加灵活。application.yml示例的具体代码如下。步骤2详解YAML配置文件任务实施上面的示例与perties的示例配置项相同,但是使用了YAML格式的层级结构。在YAML中,使用缩进来表示层级关系。例如,spring.datasource.url就是spring的子级,datasource是spring的子级,url是datasource的子级。总结反思尽量使用application.yml,因为它更加灵活、易读、易维护;对于简单的配置项,可以使用perties;在编写配置文件时,注意缩进和空格的使用,这是YAML格式的重要特点;在配置文件中,可以使用@Value注解来注入配置属性,也可以使用@ConfigurationProperties注解来批量注入配置属性。配置加载原理任务2任务2配置加载原理任务描述SpringBoot的配置加载原理主要基于Spring的Environment抽象,它提供了对配置文件、属性、系统环境变量和命令参数的访问。本任务将详细讲解两种配置文件如何在SpringBoot应用程序中加载和使用。任务实施在实际开发中,应用程序的配置文件可能会变得非常复杂,属性的数量也会很多。为了更好地组织和管理属性,可以使用SpringBoot的属性分组功能。可以在perties中增加配置,具体代码如下。步骤1使用
@ConfigurationProperties注入属性任务实施在perties配置文件中,可以使用@ConfigurationProperties注解来定义属性分组,具体代码如下。任务实施上述示例中的@ConfigurationProperties注解需要在一个@Configuration注解的类上使用。@ConfigurationProperties注解定义了一个名为myapp的属性分组,并声明了name和age两个属性。在应用程序中使用,具体代码如下。任务实施启动应用程序,访问http://localhost:8080/info,如图3-2-1所示。任务实施@Value也能从配置文件中获取属性的值,需要一个属性一个属性地进行绑定。可以直接在应用程序中使用,具体代码如下。步骤2
使用@Value注入属性任务实施启动应用程序,访问http://localhost:8080/valueInfo,如图3-2-2所示。任务实施两种注解都能够读取配置文件中的属性并绑定到JavaBean中,但存在以下区别。步骤3
两种注解对比分析(2)功能。(1)使用位置不同。@ConfigurationProperties:标注在JavaBean的类名上。@Value:标注在JavaBean的属性上。@ConfigurationProperties:用于批量绑定配置文件中的配置。@Value:只能一个一个地指定需要绑定的位置,绑定粒度更小。任务实施(4)应用场景不同。(3)复杂类型封装。@ConfigurationProperties:支持所有类型的封装,如Map、List、Set以及对象等。@Value:只支持基本数据类型的封装,如字符串、布尔值、整数等类型。两者并没有明显的优劣势之分,只是应用场景不同。若只是获取配置文件中的某项值,则推荐使用@Value注解;若专门编写了一个JavaBean来和配置文件进行映射,则建议使用@ConfigurationProperties注解。总结反思SpringBoot配置文件加载是通过SpringBoot的自动配置机制实现的。SpringBoot会首先加载perties文件中的配置,如果存在相同的配置项,就覆盖之前的配置。如果同时存在perties和application.yml文件,就优先加载perties文件。自定义配置任务3任务3自定义配置任务描述本任务将详细讲解如何在SpringBoot应用中创建和使用自定义配置。学习如何定义、加载,并注入自定义配置属性,以及如何利用SpringBoot的强大特性对其进行验证和绑定。任务实施该注解用于指定自定义配置文件的位置和名称,具体示例如下。(1)在resources下添加一个自定义配置文件perties,具体代码如下。步骤1使用@PropertySource加载配置文件
任务实施(2)在controller下创建PropertySourceController应用,具体代码如下。任务实施(3)启动程序,访问http://localhost:8080/propertyTest,可以看到在perties文件中的配置,如图3-3-1所示。任务实施该注解主要用于原生配置文件引入。SpringBoot是全注解开发,对于一些使用配置文件的项目,SpringBoot可以通过@ImportResource将配置文件中的内容引入SpringBoot项目中,不需要将配置文件中的内容一个一个地按照注解的方式改动。具体示例如下。(1)在resources下创建bean.xml文件,具体代码如下。步骤2使用@ImportResource加载XML配置文件任务实施(2)在com.example.demo023下创建bean目录,并在bean下创建BeanXml实体类,具体代码如下。任务实施任务实施(3)在controller下创建ImportXmlController应用,具体代码如下。任务实施(4)启动程序,访问http://localhost:8080/xmlTest,可以看到在bean.xml中的配置,如图3-3-2所示。任务实施该注解用于自定义配置类(Spring容器组件),并将其生成实例存到Spring容器中。用该标记标识的类为核心配置类,也可以用@Component注解代替。具体示例如下。(1)在config目录下创建MyComponent类,具体代码如下。步骤3使用@Configuration编写自定义配置类任务实施(2)在controller下创建MyComponentController应用,具体代码如下。任务实施(3)启动程序,访问http://localhost:8080/myComponentTest,可以看到自定义的bean02组件,如图3-3-3所示。总结反思其实,在SpringBoot应用程序中,自动配置是一个强大的特性,它可以自动配置应用程序的各个方面。而且通过自定义自动配置,开发者可以根据自己的需求来配置应用程序,从而使应用程序更加灵活、高效。外部化配置的方式任务4任务4外部化配置的方式任务描述SpringBoot支持多种外部化配置,以便于开发者能够在不同的环境下使用同一套应用程序代码。本任务将详细介绍各种外部化配置方式及各种配置方式的优先级。任务实施1.随机值配置配置文件中的${random}可以用来生成各种不同类型的随机值,从而简化了代码生成的麻烦。例如,生成int值、long值或string字符串。原理在于,RandomValuePropertySource类重写了getProperty方法,判断以random.为前缀之后,进行了适当的处理,具体代码如下。步骤1常用外部化配置举例任务实施2.命令行参数配置默认情况下,SpringApplication将所有的命令行选项参数(以--开头的参数,如--server.port=9000)转换为属性,并将它们加入SpringEnvironment中,命令行属性的配置始终优先于其他属性配置。如果不希望将命令行属性添加到Environment中,可以使用SpringApplication.setAddCommandLineProperties(false)禁用它,具体代码如下。任务实施3.属性文件配置属性文件配置这一部分是我们比较熟悉的,我们在快速创建SpringBoot项目时,默认会在resources目录下生成一个perties文件。SpringApplication都会从配置文件加载配置的属性,并最终加入Spring的Environment中。除了resources目录下,还有其他路径,SpringBoot默认是支持存放配置文件的。当配置文件同时出现时,优先级从上往下依次降低(上面配置的属性将会覆盖下面的)。例如:当前项目根目录下的/config目录下。当前项目的根目录下。resources目录下的/config目录下。resources目录下。任务实施4.指定profile属性通常情况下,开发的应用程序需要部署到不同的环境下,属性的配置自然也需要不同。如果每次在发布时都替换配置文件,则过于麻烦。SpringBoot的多环境配置为此提供了便利。具体做法如下。在resource目录下创建如下3个文件。perties:默认配置,default。perties:开发环境,dev。perties:测试环境,test。perties
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人事规定考勤制度
- 玩具公司财务管理制度
- 电视节目制作公司后期办公室工作流程
- 便民服务考勤制度
- 劳务合同考勤制度
- 河北保定市阜平县2025-2026学年七年级第一学期期末学业水平检测生物学试题(无答案)
- 局机关落实考勤制度
- 山姆会员店考勤制度
- 工商联考勤制度
- 市场部出差考勤制度
- 托育机构管理
- 2025年伊春职业学院单招职业技能测试题库带答案
- 农村土地整改合同范本
- 第四次全国文物普查工作推进情况汇报材料
- 《汽车和挂车光信号装置及系统》(征求意见稿)
- 个人借条模板-电子版
- 呼吸衰竭的早期识别和紧急处理方法
- word格式模板:离职证明(标准版):免修版模板范本
- 加氢裂化工艺培训
- 春季安全大检查检查表
- 中西翻译简史要点
评论
0/150
提交评论