spring boot的工作原理和重要组件
总的流程图:
SpringBootApplication
ctrl+鼠标左键进入具体方法界面
@SpringBootApplication:spring boot的主配置类
该注解包含:
@SpringBootConfiguration: 包含@Configuration,表示“配置类”:
1.该类是一个配置类
2.加了@Configuration注解的类,会自动纳入Spring 容器 (@Component)
@Configuration
@Configuration
public class A//表示A是一个 用于 配置的类
{
}
@EnableAutoConfiguration:
使spring boot可以自动配置 :可以找到@SpringBootApplication所在类的包 ,作用:就会将该包及所有的子包 全部纳入spring容器
spring boot在启动时,会根据META-INF/spring.factories找到相应的三方依赖,并将这些依赖引入本项目
@Import(EnableAutoConfigurationImportSelector.class):给容器中导入组件
EnableAutoConfigurationImportSelector:导入哪些组件的选择器
所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中
会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作调用SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作.以前我们需要自己配置的东西,自动配置类都帮我们
J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
总结:
编写项目时,一般会 对自己写的代码 以及 三方依赖 进行配置。但是spring boot可以自动进行配置:
a:自己写的代码,spring boot通过@SpringBootConfiguration自动帮我们配置;
b. 三方依赖 通过spring-boot-autoconfigure-2.0.3.RELEASE.jar中
的META-INF/spring.factories进行声明,然后通过@EnableAutoConfiguration开启使用即可
spring-boot-autoconfigure-2.0.3.RELEASE.jar包中 包含了 J2EE整合体系中 需要的依赖。
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class):Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器
如何实现自动装配
具体细节见点击观看具体类之间的跳转
研究org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
通过观察该源码 发现:
@Configuration:标识此类是一个配置类 、将此类纳入springioc容器
@EnableConfigurationProperties(HttpEncodingProperties.class): 通过HttpEncodingProperties将编码设置为了UTF_8 (即自动装配为UTF_8, 如何修改改编码:通过改HttpEncodingProperties的 predfix+属性名 进行修改 [配置文件中,yml/properties])
即:该注解给了默认编码utf8,并且提供了prefix+属性名 的方式 供我们修改编码。
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
当属性满足要求时,此条件成立 :要求 如果没有配置spring.http.encoding.enabled=xxx, 则成立。
总结:1每一个XxAutoConfiguration 都有很多条件@ConditionalOnXxx,当这些条件都满足时,
则此配置自动装配生效(utf-8)。但是我们可以手工修改改 自动装配: XxxProperties文件中的
prefix.属性名=value
2全局配置文件中的key, 来源于某个Properties文件中的 prefix+属性名
--boot通过XxAutoConfiguration实现自动装配 ,修改默认值 XxxProperties( prefix+属性名)
如何直到 spring boot开启了哪些自动装配、禁止了哪些自动装配: application.properties中 debug=true
Positive matches列表 表示 spring boot自动开启的装配
Negative matches列表 表示spring boot在此时 并没有启用的自动装配。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200804115936940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzgxMzE3,size_16,color_FFFFFF,t_70)
自己写的
引入三方依赖(jar、配置)
配置文件
作用:spring boot 自动配置(约定,8080 ).可以使用配置文件 对默认的配置 进行修改
默认全局配置文件:
application.properties : k=v,或行内写法(k: v,[Set/List/数组] {map,对象类型的属性},并且 []可省,{}不能省)
application.yml : yaml ain't myarkup language ,不是一个标记文档
注意:1. k:空格v 2.通过垂直对齐 指定层次关系 3.默认可以不写引号; ""会将其中的转义符进行转义,其他不会
当debug=true时运行
创建
application.yml