




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
J
a
v
a
E
E框架整合开发创新·协作·分享T
I
P
C
C教案第六章Spring
Boot核心T
I
P
C
C教案本章目标理解Spring
Boot的自动配置原理了解Spring
Boot的条件注解掌握Spring
Boot的核心注解掌握Spring
Boot的基本配置T
I
P
C
C教案本章内容Spring
Boot的基本配置读取应用配置日志配置Spring
Boot的自动配置原理Spring
Boot的条件注解T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.1启动类和核心注解@SpringBootApplicationSpring
Boot应用通常都有一个名为*Application的程序入口类,该入口类需要使用Spring
Boot的核心注解
@SpringBootApplication标注为应用的启动类。Spring
Boot的核心注解@SpringBootApplication是一个组合注解,主要组合了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解。源代码可以从spring-boot-autoconfigure-2.4.1.jar依赖包中查看
org/springframework/boot/autoconfigure/SpringBootApplication.java。T
I
P
C
C教案1.@SpringBootConfiguration注解@SpringBootConfiguration是Spring
Boot应用的配置注解,该注解也是一个组合注解,源代码可以从spring-boot-2.4.1.jar依赖包中查看
org/springframework/boot/SpringBootConfiguration.java。
在Spring
Boot应用中推荐使用@SpringBootConfiguration注解替代@Configuration注解。T
I
P
C
C教案2.@EnableAutoConfiguration注解@EnableAutoConfiguration注解可以让Spring
Boot根据当前应用项目所依赖的jar自动配置项目的相关配置。例如,在Spring
Boot项目的pom.xml文件中添加了spring-boot-starter-web依赖,Spring
Boot项目会自动添加Tomcat和Spring
MVC的依赖,同时对Tomcat和Spring
MVC进行自动配置。T
I
P
C
C教案3.@ComponentScan注解该注解的功能是让Spring
Boot自动扫描
@SpringBootApplication所在类的同级包以及它的子包中的配置,所以建议将@SpringBootApplication注解的入口类放置在项目包下(Group
Id+Artifact
Id组合的包名),这样可以保证
Spring
Boot自动扫描项目所有包中的配置。这样就不需要在配置文件中配置包的扫描。T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.2关闭某个特定的自动配置使用@EnableAutoConfiguration注解可以让Spring
Boot根据当前应用项目所依赖的jar自动配置项目的相关配置。如果开发者不需要Spring
Boot的某一项自动配置,该如何实现呢?通过查看@SpringBootApplication的源代码可知,应该使用
@SpringBootApplication注解的exclude参数关闭特定的自动配置,以关闭neo4j自动配置为例,代码如下:@SpringBootApplication(exclude={Neo4jDataAutoConfiguration.class})T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.3定制Banner首先,在src/main/resources目录下新建banner.txt文件,并在文件中添加任意字符串内容,如“#Hello,Spring
Boot!”。然后,重新启动Spring
Boot项目,将发现控制台启动信息已经发生改变。如果开发者想把启动字符串信息换成字符串图案,具体操作:首先,打开网站/software/taag,输入自定义字符串,单击网页下方的“Select
&
Copy”按钮。然后,将自
定义banner字符串图案复制到src/main/resources目录下的
banner.txt文件中,重新启动Spring
Boot项目即可。T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.4关闭banner开发者如果需要关闭banner,可以在src/main/resources目录下的perties文件中添加如下配置:spring.main.banner-mode
=
offT
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.5
Spring
Boot的全局配置文件Spring
Boot的全局配置文件(perties或application.yml)位于Spring
Boot应用的
src/main/resources目录下。1.设置端口号server.port=88882.设置Web应用的上下文路径server.servlet.context-path=/XXX这时应该通过“http://localhost:8080/XXX/testStarters”访问如下控制器类中的请求处理方法:@RequestMapping("/testStarters")public
String
index()
{}!!!在Spring
Boot的全局配置文件中,可以配置与修改多个参数,读者想了解参数的详细说明和描述可以查看官方文档说明:https://docs.spring.io/spring-boot/docs/2.4.1/reference/htmlsingle/#common-application-properties。T
I
P
C
C教案6.1
Spring
Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5
Spring
Boot的全局配置文件6.1.6
Spring
Boot的StartersT
I
P
C
C教案6.1.6
Spring
Boot的StartersSpring
Boot提供了很多简化企业级开发的“开箱即用”的
Starters。Spring
Boot项目只要使用了所需要的Starters,Spring
Boot即可自动关联项目开发所需要的相关依赖。例如,我们在ch6_1的pom.xml文件中,添加如下依赖配置:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>Spring
Boot将自动关联Web开发的相关依赖,如tomcat、spring-webmvc等,进而对Web开发的支持,并将相关技术的配置实现自动配置。通过访问“https://docs.spring.io/spring-boot/docs/2.4.1/reference/htmlsingle/#using-boot-starter”官网,可以查看Spring
Boot官方提供的StartersT
I
P
C
C教案本章内容Spring
Boot的基本配置读取应用配置日志配置Spring
Boot的自动配置原理Spring
Boot的条件注解T
I
P
C
C教案6.2读取应用配置6.2.1
Environment6.2.2
@Value6.2.3
@ConfigurationProperties6.2.4
@PropertySourceT
I
P
C
C教案6.2.1
EnvironmentEnvironment是一个通用的读取应用程序运行时的环境变量的类,可以通过key-value方式读取perties、命令行输入参数、系统属性、操作系统环境变量等。
【例6-1】使用Environment类读取perties配置文件的内容。1.创建Spring
Boot项目ch6_1使用STS快速创建Spring
Web应用ch6_1。2.添加配置文件内容
在src/main/resources目录下,找到全局配置文件
perties,并添加如下内容:test.msg=read
configT
I
P
C
C教案6.2.1
Environment3.创建控制器类EnvReaderConfigController在src/main/java目录下,创建名为com.ch6_1.controller的包(是com.ch6_1包(主类所在的包)的子包,保障注解全部被扫描),并在该包下创建控制器类EnvReaderConfigController。在控制器类EnvReaderConfigController中,使用@Autowired注解依赖注入Environment类的对象。@RestControllerpublic
class
EnvReaderConfigController{@Autowiredprivate
Environment
env;@RequestMapping("/testEnv")public
String
testEnv()
{return"方法一:"+env.getProperty("test.msg");//test.msg为配置文件perties中的key}}T
I
P
C
C教案6.2.1
Environment4.启动Spring
Boot应用运行Ch61Application类的main方法,启动Spring
Boot应用。5.测试应用启动Spring
Boot应用后,默认访问地址为:
http://localhost:8080/,将项目路径直接设为根路径,这是
Spring
Boot的默认设置。因此,我们可以通过
http://localhost:8080/testEnv测试应用(testEnv与控制器类
ReaderConfigController中的@RequestMapping("/testEnv")对应)。T
I
P
C
C教案6.2读取应用配置6.2.1
Environment6.2.2
@Value6.2.3
@ConfigurationProperties6.2.4
@PropertySourceT
I
P
C
C教案6.2.2
@Value使用@Value注解读取配置文件内容示例代码如下:@Value("${test.msg}")//test.msg为配置文件perties中的keyprivate
String
msg;//通过@Value注解将配置文件中key对应的value赋值给变量msg@RestControllerpublic
class
ValueReaderConfigController
{@Value("${test.msg}")private
String
msg;@RequestMapping("/testValue")public
String
testValue()
{return"方法二:"+msg;}}http://localhost:8080/testValue测试应用T
I
P
C
C教案6.2读取应用配置6.2.1
Environment6.2.2
@Value6.2.3
@ConfigurationProperties6.2.4
@PropertySourceT
I
P
C
C教案6.2.3
@ConfigurationProperties使用@ConfigurationProperties首先建立配置文件与对象的映
射关系,然后在控制器方法中使用@Autowired注解将对象注入。【例6-3】使用@ConfigurationProperties读取配置文件内容。#
nest
Simple
propertiesobj.sname=chenhengobj.sage=88#List
propertiesobj.hobby[0]=runningobj.hobby[1]=basketball#Map
Propertiesobj.city.cid=dlame=dalianT
I
P
C
C教案建立配置文件与对象的映射关系@Component//使用Component注解,声明一个组件,被控制器依赖注入@ConfigurationProperties(prefix="obj")//obj为配置文件中key的前缀public
class
StudentProperties{private
String
sname;private
int
sage;private
List<String>
hobby;private
Map<String,
String>
city;//省略set和get方法@Overridepublic
String
toString()
{return
"StudentProperties
[sname="
+
sname+
",
sage="
+
sage+
",
hobby0="
+
hobby.get(0)+
",
hobby1="
+
hobby.get(1)+
",
city="
+
city
+
"]";}}T
I
P
C
C教案创建控制器类ConfigurationPropertiesController@RestControllerpublic
class
ConfigurationPropertiesController
{@AutowiredStudentProperties
studentProperties;@RequestMapping("/testConfigurationProperties")public
String
testConfigurationProperties()
{return
studentProperties.toString();}}通过http://localhost:8080/testConfigurationProperties测试应用T
I
P
C
C教案6.2读取应用配置6.2.1
Environment6.2.2
@Value6.2.3
@ConfigurationProperties6.2.4
@PropertySourceT
I
P
C
C教案6.2.4
@PropertySource可以使用@PropertySource注解找到项目的其他配置文件,然后结合6.2.1~6.2.3节中任意一种方式读取即可。【例6-4】使用@PropertySource+@Value读取其他配置文件内容。在ch6_1的src/main/resources目录下创建配置文件
perties和perties,并在perties文件中添加如下内容:your.msg=hello.在perties文件中添加如下内容:my.msg=test
PropertySourceT
I
P
C
C教案创建控制器类PropertySourceValueReaderOhterController在ch6_1项目的com.ch6_1.controller包中,创建名为
PropertySourceValueReaderOhterController的控制器类。在该控制器类中,首先使用@PropertySource注解找到其它配置文件,然后使用@Value注解读取配置文件内容@RestController@PropertySource({"perties","perties"})public
class
PropertySourceValueReaderOhterController
{@Value("${my.msg}")private
String
mymsg;@Value("${your.msg}")private
String
yourmsg;@RequestMapping("/testProperty")public
String
testProperty()
{return"其他配置文件perties:"+mymsg+"<br>"+"其他配置文件perties:"+yourmsg;}}通过
http://localhost:8080/testProperty测试应用T
I
P
C
C教案本章内容Spring
Boot的基本配置读取应用配置日志配置Spring
Boot的自动配置原理Spring
Boot的条件注解T
I
P
C
C教案6.3日志配置默认情况下,Spring
Boot应用使用LogBack实现日志,使用
apache
Commons
Logging作为日志接口,因此代码中通常如下所示使用日志:@RestControllerpublic
class
LogTestController
{private
Log
log
=
LogFactory.getLog(LogTestController.class);@RequestMapping("/testLog")public
String
testLog()
{("测试日志");return"测试日志";}}T
I
P
C
C教案日志级别日志级别有ERROR、WARN、INFO、DEBUG和TRACE。Spring
Boot默认的日志级别为INFO,日志信息可以打印到控制台。但开发者可以自己设定Spring
Boot项目的日志输出级别,例如在perties配置文件中加入以下配置:#设定日志的默认级别为infologging.level.root=info#设定org包下的日志级别为warn=warn#设定com.ch.ch4_1包下的日志级别为debug.ch.ch4_1=debugT
I
P
C
C教案输出日志到文件Spring
Boot项目默认并没有输出日志到文件,但开发者可以在
perties配置文件中指定日志输出到文件,配置示例如下:logging.file=my.log该日志文件位于Spring
Boot项目运行的当前目录(项目工程目录下)。将在c:/log目录下生成一个名为my.log的日志文件。logging.file=c:/log/my.log不管日志文件位于何处,当日志文件大小到达10MB时,将自动生成一个新日志文件。T
I
P
C
C教案日志格式控制logging.pattern.console=%level
%date{yyyy-MM-dd
HH:mm:ss:SSS}
%logger{50}.%M
%L
:%m%nlogging.pattern.file=%level
%date{ISO8601}
%logger{50}.%M
%L
:%m%n文件日志输出格式
控制台日志输出格式logging.pattern.console:指定控制台日志格式。logging.pattern.file:指定日志文件格式。%level:指定输出日志级别。%date:指定日志发生的时间。ISO8601表示标准日期,相当于yyyy-MM-dd
HH:mm:ss:SSS。%logger:指定输出Looger的名字,包名+类名,{n}限定了输出长度。%M:指定日志发生时的方法名。%L:指定日志调用时所在代码行,适用于开发调试,线上运行时不建议使用此参数,因为获取代码行对性能有消耗。%m:表示日志消息。%n:表示日志换行。T
I
P
C
C教案本章内容Spring
Boot的基本配置读取应用配置日志配置Spring
Boot的自动配置原理Spring
Boot的条件注解T
I
P
C
C教案6.4
Spring
Boot的自动配置原理从6.1.1节,我们可知Spring
Boot使用核心注解
@SpringBootApplication将一个带有main方法的类标注为应
用的启动类。@SpringBootApplication注解最主要的功能之一是为Spring
Boot开启了一个@EnableAutoConfiguration注解的自动配置功能。@EnableAutoConfiguration注解主要利用了一个类名为
AutoConfigurationImportSelector的选择器向Spring容器自动配置一些组件。@EnableAutoConfiguration注解的源代码可以从spring-boot-autoconfigure-2.4.1.jar(org.springframework.boot.autoconfigure)依赖包中查看。T
I
P
C
C教案6.4
Spring
Boot的自动配置原理从源代码中可以看出,最终Spring
Boot是通过加载所有(inmultiple
JAR
files)META-INF/spring.factories配置文件进行自动配置的。所以,@SpringBootApplication注解通过使用
@EnableAutoConfiguration注解自动配置的原理是:从classpath中搜索所有META-INF/spring.factories配置文件,并将其中
org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的配置项通过Java反射机制进行实例化,然后汇总并加载到Spring的IoC容器。T
I
P
C
C教案本章内容Spring
Boot的基本配置读取应用配置日志配置Spring
Boot的自动配置原理Spring
Boot的条件注解T
I
P
C
C教案6.5
Spring
Boot的条件注解6.5.1条件注解6.5.2实例分析6.5.3自定义条件6.5.4自定义StartersT
I
P
C
C教案6.5.1条件注解打开spring.factories配置文件中任意一个AutoConfiguration,一般都可以找到条件注解。所谓Spring的条件注解,就是应用程序的配置类在满足某些特定条件才会被自动启用此配置类的配置项。Spring
Boot的条件注解位于spring-boot-autoconfigure-2.4.1.jar的org.springframework.boot.autoconfigure.condition包下。条件注解都是组合了@Conditional元注解,只是针对不同的条件去实现。T
I
P
C
C教案6.5
Spring
Boot的条件注解6.5.1条件注解6.5.2实例分析6.5.3自定义条件6.5.4自定义StartersT
I
P
C
C教案6.5.2实例分析从Spring
MVC项目的web.xml文件中过滤器的配置可知,
Spring
Boot自动配置HTTP编码需要满足的条件是:配置
CharacterEncodingFilter的Bean,并设置encoding和forceEncoding这两个参数。通过查看源代码可知
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration类,根据条件注解配置了
CharacterEncodingFilter的Bean,并设置了encoding和forceEncoding这两个参数。T
I
P
C
C教案6.5
Spring
Boot的条件注解6.5.1条件注解6.5.2实例分析6.5.3自定义条件6.5.4自定义StartersT
I
P
C
C教案6.5.3自定义条件Spring的@Conditional注解根据满足某特定条件创建一个特定
的Bean。例如,当某jar包在类路径下时,自动配置一个或多个
Bean。即根据特定条件控制Bean的创建行为,这样我们就可以
利用此特性进行一些自动配置。那么,开发者如何自己构造条件呢?在Spring框架中,可以通过实现Condition接口,并重写
matches方法来构造条件。【例6-7】如果类路径classpath(src/main/resources)下存在文件perties,则输出“perties文件存在。”;否则输出“perties文件不存在!”。T
I
P
C
C教案构造条件public
class
MyCondition
implements
Condition{@Overridepublic
boolean
matches(ConditionContext
context,
AnnotatedTypeMetadata
metadata)
{return
context.getResourceLoader().getResource("classpath:perties").exists();}}public
class
YourCondition
implements
Condition{@Overridepublic
boolean
matches(ConditionContext
context,
AnnotatedTypeMetadata
metadata)
{return
!context.getResourceLoader().getResource("classpath:perties").exists()}}T
I
P
C
C教案创建不同条件下Bean的类package
com.ch6_1.conditional;public
interface
MessagePrint
{public
String
showMessage();}package
com.ch6_1.conditional;public
class
MyMessagePrint
implements
MessagePrint{@Overridepublic
String
showMessage()
{return
"perties文件存在。";}}package
com.ch6_1.conditional;public
class
YourMessagePrint
implements
MessagePrint{@Overridepublic
String
showMessage()
{return
"perties文件不存在!";}}T
I
P
C
C教案创建配置类@Configurationpublic
class
ConditionConfig
{@Bean@Conditional(MyCondition.class)public
MessagePrint
myMessage()
{return
new
MyMessagePrint();}@Bean@Conditional(YourCondition.class)public
MessagePrint
yourMessage()
{return
new
YourMessagePrint();}}使用@Bean和@Conditional实例化符合条件的BeanT
I
P
C
C教案创建测试类package
com.ch6_1.conditional;import
org.springframework.context.annotation.AnnotationConfigApplicationContext;public
class
TestMain
{private
static
AnnotationConfigApplicationContext
context;public
static
void
main(String[]
args)
{context
=
new
AnnotationConfigApplicationContext(ConditionConfig.class);MessagePrint
mp
=
context.getBean(MessagePrint.class);System.out.println(mp.showMessage());}}T
I
P
C
C教案运行当Spring
Boot应用ch6_1的src/main/resources目录下存在
perties文件时,运行测试类,控制台显示
“perties文件存在。”;当Spring
Boot应用ch6_1的src/main/resources目录下不存在perties文件时,运行测试类,控制台显示“perties文件不存在!”。T
I
P
C
C教案6.5
Spring
Boot的条件注解6.5.1条件注解6.5.2实例分析6.5.3自定义条件6.5.4自定义StartersT
I
P
C
C教案6.5.4自定义Starters从6.1.6节可知,第三方为Spring
Boot贡献了许多Starters。那么,我们作为开发者是否也可以贡献自己的Starters?学习
Spring
Boot的自动配置机制后,答案是肯定的。【例6-8】自定义一个Starter(spring_boot_mystarters)。要求:当类路径中存在MyService类时,自动配置该类的Bean,并可以将相应Bean的属性在perties中配置。T
I
P
C
C教案新建Spring
Boot项目spring_boot_mystarters首先,通过选择菜单“File->New->Spring
Starter
Project”打开“New
Spring
Starter
Project”对话框。其次,在对话框中输入项目名称spring_boot_mystarters。最后,单击“Next”与“Finish”按钮。T
I
P
C
C教案修改pom文件修改Spring
Boot项目spring_boot_mystarters的pom文件,增加Spring
Boot自身的自动配置作为依赖。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency>T
I
P
C
C教案创建属性配置类MyPropertiespackage
com.ch.spring_boot_mystarters;import
perties.ConfigurationProperties;//在perties中通过my.msg=设置属性@ConfigurationProperties(prefix="my")
public
class
MyProperties{private
String
msg="默认值";public
String
getMsg()
{return
msg;}public
void
setMsg(String
msg)
{this.msg
=
msg;}}T
I
P
C
C教案创建判断依据类MyService自定义的Starters将根据该类的存在与否来创建该类的Bean,该类可以是第三方类库的类。package
com.ch.spring_boot_mystarters;public
class
MyService
{private
String
msg;public
String
sayMsg()
{return
"my
"
+
msg;}public
String
getMsg()
{return
msg;}public
void
setMsg(String
msg)
{this.msg
=
msg;}}T
I
P
C
C教案创建自动配置类MyAutoConfiguration@Configuration//开启属性配置类MyProperties提供参数@EnableConfigurationProperties(MyProperties.class)//类加载器(类路径)中是否存在对应的类@ConditionalOnClass(MyService.class)//应用环境中属性是否存在指定的值@ConditionalOnProperty(prefix
=
"my",
value
=
"enabled",
matchIfMissing
=
true)public
class
MyAutoConfiguration
{@Autowiredprivate
MyProperties
myProperties;@Bean//当容器中不存在MyService的Bean时,自动配置这个Bean@ConditionalOn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 扬帆起航梦想启程
- 2023四年级数学下册 七 三角形、平行四边形和梯形第4课时 三角形按角分类教学设计 苏教版
- 认证体系业务培训
- 《8 包饺子》(教学设计)-2023-2024学年四年级上册综合实践活动皖教版
- 七年级英语下册 Module 5 Shopping Unit 1 What can I do for you第2课时教学设计(新版)外研版
- 2024-2025学年高中生物 第4章 第2节 基因对性状的控制教学设计 新人教版必修2
- 过敏性休克的护理措施
- 2024-2025学年高中语文 第六课 语言的艺术 2 第二节 语言表达的十八般武艺-修辞手法教学设计 新人教版选修《语言文字应用》
- Unit7 Integrated Skills教学设计2023-2024学年牛津译林版英语七年级下册
- 2023三年级英语上册 Unit 2 Friends and Colours Lesson 10 Red,Yellow,Blue,Green教学设计 冀教版(三起)
- 创新学习方法助力2024年ESG考试的试题及答案
- GB/T 10810.1-2025眼镜镜片第1部分:单焦和多焦
- 2025年陕西省西安市高新唐南中学中考数学二模试卷(原卷版+解析版)
- 2025年郑州铁路职业技术学院单招职业适应性测试题库必考题
- 2024上海闵行区中小学教师招聘考试试题及答案
- 2024年新人教版九年级上册化学教学课件 6.3 二氧化碳的实验室制取
- 医疗器械行业市场分析表格
- 精装工程师转正述职报告
- 统编版小学语文四年级下册第13课《猫》精美课件
- 土壤污染防治与修复项目合同
- 新媒体环境下新闻虚拟主播对受众认知影响及发展路径研究
评论
0/150
提交评论