为什么使用springboot框架,springboot常用的配置文件,如何读取配置文件中自定义的内容,多环境下如何切换配置文件,包扫描原理,自动装配的原理
1.为什么使用springboot框架
1.创建独立的spring应用程序
2.嵌入的 Tomcat,无需部署 WAR 文件
3.简化 Maven 配置 pom.xml
4.自动配置 Spring 简化配置内容
5.开箱即用,没有代码生成,也无需 XML 配置。
6.微服务开发的基础
2.springboot常用的配置文件
1. properties属性文件
#key=value格式 #设置端口号 server.port=8080 #设置上下文路径 默认/ #server.servlet.context-path=/aaa2.yml
##格式 key: value server: port: 8088 servlet: context-path: /bbb
3.如何读取配置文件中自定义的内容?
3.1为何需要把自定义的内容放入配置文件中
方便修改。如果写在java代码属于硬编码,不便于维护和修改, 把一些变动的数据写在配置文件中,然后通过java代码读取配置文件。
3.2如何读取springboot配置文件中的内容
1.@ConfigurationProperties(prefix = "")
2. @Value单个读取,@Value它只能读取基本类和字符串类型,无法读取其他类型
4.多环境下如何切换配置文件
4.1遇到的环境
开发环境--->测试环境--->线上环境
4.2创建多个配置文件
4.3激活相应的配置文件
5.包扫描原理
主函数在运行时加载了使用@SpringBootApplication的类,该注解@SpringBootApplication是一个复合注解。
其中@EnableAutoConfiguration就是开启自动配置的功能。该注解@EnableAutoConfiguration它也是一个复合注解。
其中注解@AutoConfigurationPackage,这个注解完成了包的扫描。 该注解中使用@Import注解导入包扫描的类。
修改扫描路径,一般不修改
6.springboot自动装配的原理
为什么springboot没有加载前端控制器DispatcherServlet,依然可以完成路径的请求?
protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
if (!this.isEnabled(annotationMetadata)) {
return EMPTY_ENTRY;
} else {
AnnotationAttributes attributes = this.getAttributes(annotationMetadata);
//获取所有的自动配置类
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
//移除重复的自动配置类
configurations = this.removeDuplicates(configurations);
//移除人为排除的自动配置类
Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);
this.checkExcludedClasses(configurations, exclusions);
configurations.removeAll(exclusions);
//排除掉为引入相关jar的自动配置类
configurations = this.getConfigurationClassFilter().filter(configurations);
this.fireAutoConfigurationImportEvents(configurations, exclusions);
return new AutoConfigurationEntry(configurations, exclusions);
}
}
springboot工程在启动时加载了@SpringBootApplication注解的类,该注解是一个复合注解,其中包含@EnableAutoConfiguration 该注解用于开启自动配置功能。
该注解也是一个复合注解,其中@Import(AutoConfigurationImportSelector.class) 导入了自动配置选择器类,该类会加载相应的自动配置类,不同的自动配置类完成对应的自动装配功能。
所以无需自己再配置。