版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章SpringBoot核心学习目的与要求本章将详细介绍SpringBoot的核心注解、基本配置、自动配置原理以及条件注解。通过本章的学习,掌握SpringBoot的核心注解与基本配置,理解SpringBoot的自动配置原理与条件注解。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录4.1SpringBoot的基本配置4.2读取应用配置4.3日志配置4.4SpringBoot的自动配置原理4.5SpringBoot的条件注解《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.1.1启动类和核心注解@SpringBootApplicationSpringBoot应用通常都有一个名为*Application的程序入口类,该入口类需要使用SpringBoot的核心注解@SpringBootApplication标注为应用的启动类。另外,该入口类有一个标准的Java应用程序的main方法,在main方法中通过“SpringApplication.run(*Application.class,args);”启动SpringBoot应用。SpringBoot的核心注解@SpringBootApplication是一个组合注解,主要组合了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.@SpringBootConfiguration注解@SpringBootConfiguration是SpringBoot应用的配置注解,该注解也是一个组合注解,源代码可以从spring-boot-x.y.z.jar依赖包中查看org/springframework/boot/SpringBootConfiguration.java。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.@EnableAutoConfiguration注解@EnableAutoConfiguration注解可以让SpringBoot根据当前应用项目所依赖的JAR包自动配置项目的相关配置。例如,在SpringBoot项目的pom.xml文件中添加了spring-boot-starter-web依赖,SpringBoot项目会自动添加Tomcat和SpringMVC的依赖,同时对Tomcat和SpringMVC进行自动配置。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.@ComponentScan注解该注解的功能是让SpringBoot自动扫描@SpringBootApplication所在类的同级包以及它的子包中的配置,所以建议将@SpringBootApplication注解的入口类放置在项目包中(GroupId+ArtifactId组合的包名),并将用户自定义的程序放置在项目包及其子包中,这样可以保证SpringBoot自动扫描项目所有包中的配置。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.1.2SpringBoot的全局配置文件SpringBoot的全局配置文件(perties或application.yml)位于SpringBoot应用的src/main/resources目录下。1.设置端口号在SpringBoot应用的src/main/resources目录下找到名为perties的全局配置文件,添加如下配置内容:server.port=8888可以将内嵌的Tomcat的默认端口改为8888。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.设置Web应用的上下文路径如果开发者想设置一个Web应用程序的上下文路径,可以在perties文件中配置如下内容:server.servlet.context-path=/XXX这时应该通过“http://localhost:8080/XXX/testStarters”访问如下控制器类中的请求处理方法:@GetMapping("/testStarters")publicStringindex(){}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.配置文档在SpringBoot的全局配置文件中,可以配置与修改多个参数,读者想了解参数的详细说明和描述可以查看官方文档说明:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#appendix.application-properties。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.1.3SpringBoot的StartersSpringBoot提供了许多简化企业级开发的“开箱即用”的Starters。SpringBoot项目只要使用所需要的Starters,SpringBoot即可自动关联项目开发所需要的相关依赖。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>SpringBoot将自动关联Web开发的相关依赖,如tomcat、spring-webmvc等,进而对Web开发的支持,并将相关技术的配置实现自动配置。通过访问“https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.starters”官网,可以查看SpringBoot官方提供的Starters。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录4.1SpringBoot的基本配置4.2读取应用配置4.3日志配置4.4SpringBoot的自动配置原理4.5SpringBoot的条件注解《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.2读取应用配置SpringBoot提供了三种方式读取项目的perties配置文件的内容。此三种方式分别为:Environment类、@Value注解以及@ConfigurationProperties注解。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.2.1EnvironmentEnvironment是一个通用的读取应用程序运行时的环境变量的类,可以通过key-value方式读取perties、命令行输入参数、系统属性、操作系统环境变量等。【例4-1】使用Environment类读取perties配置文件的内容。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.创建SpringBootWeb应用ch4使用IDEA快速创建SpringBootWeb应用ch4,同时给应用ch4添加如图4.2所示的依赖。在4.2.3节使用@ConfigurationProperties注解进行读取配置时,需要SpringConfigurationProcessor依赖。需要注意的是,使用Lombok时需要事先给IDEA安装Lombok插件。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.添加配置文件内容在应用ch4的src/main/resources目录下,找到全局配置文件perties,并添加如下内容:test.msg=readconfig《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.创建控制器类EnvReaderConfigController@RestControllerpublicclassEnvReaderConfigController{ @Autowired
privateEnvironmentenv; @GetMapping("/testEnv") publicStringtestEnv(){
return"方法一:"+env.getProperty("test.msg"); //test.msg为配置文件perties中的key }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
启动与测试应用4.启动SpringBoot应用运行Ch4Application类的main方法,启动SpringBoot应用。5.测试应用启动SpringBoot应用后,默认访问地址为:http://localhost:8080/,将项目路径直接设为根路径,这是SpringBoot的默认设置。因此,我们可以通过http://localhost:8080/testEnv测试应用(testEnv与控制器类ReaderConfigController中的@GetMapping("/testEnv")对应)《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.2.2@Value使用@Value注解读取配置文件内容示例代码如下:@Value("${test.msg}")//test.msg为配置文件perties中的keyprivateStringmsg;//通过@Value注解将配置文件中key对应的value赋值给变量msg【例4-2】使用@Value注解读取配置文件内容。@RestControllerpublicclassValueReaderConfigController{
@Value("${test.msg}")privateStringmsg; @GetMapping("/testValue") publicStringtestValue(){
return"方法二:"+msg; }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.2.3@ConfigurationProperties使用@ConfigurationProperties首先建立配置文件与对象的映射关系,然后在控制器方法中使用@Autowired注解将对象注入。【例4-3】使用@ConfigurationProperties读取配置文件内容。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.添加配置文件内容#nestSimplepropertiesobj.sname=chenhengobj.sage=88#Listpropertiesobj.hobby[0]=runningobj.hobby[1]=basketball#MapPropertiesobj.city.cid=dlame=dalian《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.建立配置文件与对象的映射关系@Component//使用Component注解,声明一个组件,被控制器依赖注入@ConfigurationProperties(prefix="obj")//obj为配置文件中key的前缀@DatapublicclassStudentProperties{ privateStringsname; privateintsage; privateList<String>hobby; privateMap<String,String>city; @Override publicStringtoString(){
return"StudentProperties[sname="+sname
+",sage="+sage
+",hobby0="+hobby.get(0)
+",hobby1="+hobby.get(1)
+",city="+city+"]";}}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.创建控制器类ConfigurationPropertiesController@RestControllerpublicclassConfigurationPropertiesController{
@Autowired StudentPropertiesstudentProperties; @GetMapping("/testConfigurationProperties") publicStringtestConfigurationProperties(){ returnstudentProperties.toString(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.2.4@PropertySource可以使用@PropertySource注解找到项目的其他配置文件,然后结合4.2.1~4.2.3节中任意一种方式读取即可。【例4-4】使用@PropertySource+@Value读取其他配置文件内容。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.创建配置文件在ch4的src/main/resources目录下创建配置文件perties和perties,并在perties文件中添加如下内容:your.msg=hello.在perties文件中添加如下内容:my.msg=testPropertySource《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.创建控制器类PropertySourceValueReaderOhterController@RestController@PropertySource({"perties","perties"})publicclassPropertySourceValueReaderOhterController{
@Value("${my.msg}")privateStringmymsg;@Value("${your.msg}")privateStringyourmsg; @GetMapping("/testProperty") publicStringtestProperty(){ return"其他配置文件perties:"+mymsg+"<br>" +"其他配置文件perties:"+yourmsg; }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.启动并测试应用《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录4.1SpringBoot的基本配置4.2读取应用配置4.3日志配置4.4SpringBoot的自动配置原理4.5SpringBoot的条件注解《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.3日志配置默认情况下,SpringBoot项目使用LogBack实现日志,使用apacheCommonsLogging作为日志接口。@RestControllerpublicclassLogTestController{
privateLoglog=LogFactory.getLog(LogTestController.class); @GetMapping("/testLog") publicStringtestLog(){
("测试日志"); return"测试日志"; }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.3日志配置日志级别有ERROR、WARN、INFO、DEBUG和TRACE。SpringBoot默认的日志级别为INFO,日志信息可以打印到控制台。但开发者可以自己设定SpringBoot项目的日志输出级别,例如在perties配置文件中加入以下配置:#设定日志的默认级别为infologging.level.root=info#设定org包下的日志级别为warn=warn#设定com.ch.ch4包下的日志级别为debug.ch.ch4=debug《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.3日志配置SpringBoot项目默认并没有输出日志到文件,但开发者可以在perties配置文件中指定日志输出到文件,配置示例如下:logging.file=my.log日志输出到my.log文件,该日志文件位于SpringBoot项目运行的当前目录(项目工程目录下)。也可以指定日志文件目录,配置示例如下:logging.file=c:/log/my.log这样将在c:/log目录下生成一个名为my.log的日志文件。不管日志文件位于何处,当日志文件大小到达10MB时,将自动生成一个新日志文件。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录4.1SpringBoot的基本配置4.2读取应用配置4.3日志配置4.4SpringBoot的自动配置原理4.5SpringBoot的条件注解《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.4SpringBoot的自动配置原理SpringBoot使用核心注解@SpringBootApplication将一个带有main方法的类标注为应用的启动类。@SpringBootApplication注解最主要的功能之一是为SpringBoot开启了一个@EnableAutoConfiguration注解的自动配置功能。@EnableAutoConfiguration注解主要利用了一个类名为AutoConfigurationImportSelector的选择器向Spring容器自动配置一些组件。@EnableAutoConfiguration注解的源代码可以从spring-boot-autoconfigure-x.y.z.jar(org.springframework.boot.autoconfigure)依赖包中查看。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.4SpringBoot的自动配置原理AutoConfigurationImportSelector(源代码位于org.springframework.boot.autoconfigure包)类中有一个名为selectImports的方法,该方法规定了向Spring容器自动配置的组件。在方法selectImports中,调用getAutoConfigurationEntry方法获得自动配置。在方法getAutoConfigurationEntry中,调用getCandidateConfigurations方法获取自动配置数据。在方法getCandidateConfigurations中,调用了ImportCandidates类的静态方法load。在方法load中,可以看到加载一个字符串常量:LOCATION,该常量的源代码如下:privatestaticfinalStringLOCATION="META-INF/spring/%s.imports";《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.4SpringBoot的自动配置原理从上述源代码中可以看出,最终SpringBoot是通过加载所有META-INF/spring/XXX.imports配置文件进行自动配置的。所以,@SpringBootApplication注解通过使用@EnableAutoConfiguration注解自动配置的原理是:从classpath中搜索所有META-INF/spring/XXX.imports配置文件,并将其中org.springframework.boot.autoconfigure对应的配置项通过Java反射机制进行实例化,然后汇总并加载到Spring的IoC容器。在SpringBoot项目的MavenDependencies的spring-boot-autoconfigure-x.y.z.jar目录下,可以找到META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports配置文件,该文件定义了许多自动配置。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录4.1SpringBoot的基本配置4.2读取应用配置4.3日志配置4.4SpringBoot的自动配置原理4.5SpringBoot的条件注解《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.5SpringBoot的条件注解打开META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports配置文件中任意一个AutoConfiguration,一般都可以找到条件注解。例如:我们打开org.springframework.boot.autoconfigure.aop.AopAutoConfiguration的源代码,可以看到@ConditionalOnClass和@ConditionalOnProperty等条件注解。通过org.springframework.boot.autoconfigure.aop.AopAutoConfiguration的源代码可以看出,SpringBoot的自动配置是使用Spring的@Conditional注解实现的。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.5.1条件注解所谓Spring的条件注解,就是应用程序的配置类在满足某些特定条件才会被自动启用此配置类的配置项。SpringBoot的条件注解位于spring-boot-autoconfigure-x.y.z.jar的org.springframework.boot.autoconfigure.condition包下。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.5.1条件注解注解名条件实现类条件@ConditionalOnBeanOnBeanConditionSpring容器中存在指定的实例Bean@ConditionalOnClassOnClassCondition类加载器(类路径)中存在对应的类@ConditionalOnCloudPlatformOnCloudPlatformCondition是否在云平台@ConditionalOnExpressionOnExpressionCondition判断SpEL表达式是否成立@ConditionalOnJavaOnJavaCondition指定Java版本是否符合要求@ConditionalOnJndiOnJndiCondition在JNDI(Java命名和目录接口)存在的条件下查找指定的位置@ConditionalOnMissingBeanOnBeanConditionSpring容器中不存在指定的实例Bean@ConditionalOnMissingClassOnClassCondition类加载器(类路径)中不存在对应的类@ConditionalOnNotWebApplicationOnWebApplicationCondition当前应用程序不是Web程序@ConditionalOnPropertyOnPropertyCondition应用环境中属性是否存在指定的值@ConditionalOnResourceOnResourceCondition是否存在指定的资源文件。@ConditionalOnSingleCandidateOnBeanConditionSpring容器中是否存在且只存在一个对应的实例Bean@ConditionalOnWarDeploymentOnWarDeploymentCondition当前应用程序是传统WAR部署@ConditionalOnWebApplicationOnWebApplicationCondition当前应用程序是Web程序《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.5.2自定义条件Spring的@Conditional注解根据满足某特定条件创建一个特定的bean。例如,当某jar包在类路径下时,自动配置多个bean。这就是根据特定条件控制bean的创建行为,这样我们就可以利用这个特性进行一些自动配置。在Spring框架中,可以通过实现Condition接口,并重写matches方法来构造自定义条件。【例4-5】如果类路径classpath(src/main/resources)下存在文件perties,则输出“perties文件存在。”;否则输出“perties文件不存在!”。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.构造条件在SpringBoot应用ch4的src/main/java目录下创建包com.ch.ch4.conditional,并在该包中分别创建条件实现类MyCondition(存在文件perties)和YourCondition(不存在文件perties)。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.创建不同条件下Bean的类在包com.ch.ch4.conditional中,创建接口MessagePrint,并分别创建该接口的实现类MyMessagePrint和YourMessagePrint。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.创建配置类在包com.ch.ch4.conditional中,创建配置类ConditionConfig。并在该配置类中使用@Bean和@Conditional实例化符合条件的Bean。@ConfigurationpublicclassConditionConfig{
@Bean @Conditional(MyCondition.class) publicMessagePrintmyMessage(){ returnnewMyMessagePrint(); }
@Bean @Conditional(YourCondition.class) publicMessagePrintyourMessage(){ returnnewYourMessagePrint(); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.创建测试类publicclassTestMain{ privatestaticAnnotationConfigApplicationContextcontext; publicstaticvoidmain(String[]args){
context=newAnnotationConfigApplicationContext(ConditionConfig.class);
MessagePrintmp=context.getBean(MessagePrint.class); System.out.println(mp.showMessage()); }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
5.运行《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.5.3自定义Starters【例4-6】自定义一个Starter(spring_boot_mystarters)。要求:当类路径中存在MyService类时,自动配置该类的bean,并可以将相应bean的属性在perties中配置。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.新建SpringBoot项目spring_boot_mystarters《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.修改pom文件修改SpringBoot项目spring_boot_mystarters的pom文件,增加SpringBoot自身的自动配置作为依赖。另外,使用@ConfigurationProperties注解进行读取配置时,需要SpringConfigurationProcessor依赖。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.创建属性配置类MyProperties在项目spring_boot_mystarters的com.ch.spring_boot_mystarters包中,创建属性配置类MyProperties。在使用spring_boot_mystarters的SpringBoot项目的配置文件perties中,可以使用my.msg=设置属性;若不设置,默认为my.msg=默认值。@ConfigurationProperties(prefix="my")publicclassMyProperties{
privateStringmsg="默认值"; publicStringgetMsg(){ returnmsg; } publicvoidsetMsg(Stringmsg){ this.msg=msg; }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.创建判断依据类MyService在项目spring_boot_mystarters的com.ch.spring_boot_mystarters包中,创建判断依据类MyService。本例自定义的Starters将根据该类的存在与否来创建该类的bean,该类可以是第三方类库的类。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
5.创建自动配置类MyAutoConfiguration在项目spring_boot_mystarters的com.ch.spring_boot_mystarters包中,创建自动配置类MyAutoConfiguration。在该类中使用@EnableConfigurationProperties注解开启属性配置类MyProperties提供参数;使用@ConditionalOnClass注解判断类加载器(类路径)中是否存在MyService类;使用@ConditionalOnMissingBean注解判断当容器中不存在MyService的bean时,自动配置这个bean。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
@Configuration//开启属性配置类MyProperties提供参数@EnableConfigurationProperties(MyProperties.class)//类加载器(类路径)中是否存在对应的类@ConditionalOnClass(MyService.class)//应用环境中属性是否存在指定的值@ConditionalOnProperty(prefix="my",value="enabled",matchIfMissing=true)publicclassMyAutoConfiguration{ @Autowired
privateMyPropertiesmyProperties; @Bean //当容器中不存在MyService的Bean时,自动配置这个Bean
@ConditionalOnMissingBean(MyService.class) publicMyServicemyService(){ MyServicemyService=newMyService(); myService.setMsg(myProperties.getMsg()); returnmyService; }}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
6.注册配置在项目spring_boot_mystarters的src/main/resources目录下新建文件夹META-INF/spring,并在该文件夹下创建名为com.ch.spring_boot_mystarters.MyAutoConfiguration.imports的文件。在com.ch.spring_boot_mystarters.MyAutoConfiguration.imports文件中添加如下内容注册自动配置类MyAutoConfiguration:com.ch.spring_boot_mystarters.MyAutoConfiguration上述文件内容中,若有多个自动配置类,换行即可配置另一个自动配置类。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
将spring_boot_mystarters安装到Maven的本地库使用IntelliJIDEA打开spring_boot_mystarters项目,进一步打开右侧Maven,双击Lifecycle中的ins
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 购销合同买方风险评估
- 中药材茶饮用品购销合同
- 购销合同的合同风险
- 农村商业银行贷款合同样式
- 钢铁购销协议模板
- 苗木供应商绿化苗木订购合同
- 外训培训协议模板
- 解除装修合同的协议
- 月嫂家政服务合同范本
- 搬运服务协议书范本
- 【8历期末】安徽省合肥市包河区智育联盟校2023-2024学年八年级上学期1月期末历史试题
- 北师版七年级数学上册期末复习考点 清单04 基本平面图形(12个考点梳理+题型解读+提升训练)
- 仪式外包合同范例
- 物流运输双氧水安全应急预案
- 2025年上半年中科院大连化学物理研究所金催化研究中心(2302组)招聘1人易考易错模拟试题(共500题)试卷后附参考答案
- Pep小学英语六年级上册教案-全册
- 2024粤东西粤北地区教师全员轮训培训心得总结
- 服务类验收单
- MOOC 健身健美-北京林业大学 中国大学慕课答案
- 人生悟理-透过物理看人生智慧树知到期末考试答案2024年
- 教育信息化2.0时代教师新技能进阶智慧树知到期末考试答案2024年
评论
0/150
提交评论