Springboot的自动装配原理
spring boot是内嵌tomcat,不用自己配置tomcat
一、pom.xml文件
父工程
pom.xml文件中依赖父工程,只有加载了这个父工程,才能定义这个项目是一个springboot脚手架
父工程规定了所有jia包的版本号


启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>
spring-boot-starter-web
spring-boot-starter:spring-boot场景启动器,帮我们导入了web模块正常运行所依赖的组件。
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器)---工具包,只需要在项目里面引入这些starter 相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
启动器的版本也不需要加,因为它是根据父工程版本来变动的。
二、主程序类、主入口类
/** * @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用 */ @SpringBootApplicationpublic class HelloWorldMainApplication {public static void main(String[] args) {// Spring应用启动起来 SpringApplication.run(HelloWorldMainApplication.class,args);}}
- @SpringBootApplication注解完成了之前ssm项目的那些配置文件、配置类的工作。
- Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
- @SpringBootApplication注解里面的东西如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration------------------------------------Spring Boot的配置类标注在某个类上,
表示这是一个Spring Boot的配置类;
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type
= FilterType.CUSTOM, classes
= TypeExcludeFilter.class),
@Filter(type
= FilterType.CUSTOM, classes
= AutoConfigurationExcludeFilter.class)
})public
@interface SpringBootApplication {
- @SpringBootConfiguration:Spring Boot的配置类标注在某个类上,表示这是一个Spring Boot的配置类;
- @Configuration:配置类上来标注这个注解,这个与@SpringBootConfiguration注解是一样的。
- @EnableAutoConfiguration:开启自动配置功能(将第三方的东西,而且springboot可以整合,进行自动装配,不需要在配置文件中进行装配)
点进代码后,如下:
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public
@interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class):
Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;
@Import(EnableAutoConfigurationImportSelector.class);
给容器中导入组件?EnableAutoConfigurationImportSelector:导入哪些组件的选择器; 将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;

springboot比ssm好在哪?
约定大于配置,springboot是一个脚手架,使用起来比ssm更方便,使用自动装配,将第三方工具进行了整合,通过EnableAutoConfiguration下面的那些AutoConfiguration进行了整合。
热部署
文件修改过后需要重新启动主程序,添加了依赖,如下:,就解决了这个问题
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
配置文件
全局的配置文件有
两种:名称是固定的,可以同时存在。
application.properties、application.yml。
配置文件的
作用
:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好。

YAML语法
基本语法
- k:(空格)v:表示一对键值对(空格必须有);
- 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

属性和值也是大小写敏感;