1.Hello World探究
1.POM文件
1.父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
</parent>
它的父项目是
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.1.RELEASE</version>
</parent>
它来管理Spring Boot应用中所有以来的版本-<properties>标签
Spring Boot的版本仲裁中心
导入存在的依赖默认不需要写版本,不存在的依赖要写版本
2.导入的依赖
<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将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目中引入这些starter相关场景的所有依赖都会导入进来。要用什么功能,就导入什么场景的启动器。
2.主程序类,主入口类
//@SpringBootApplication来标注一个主程序类,说明这是一个Spring Boot应用
@SpringBootApplication
public class HelloworldApplication {
public static void main(String[] args) {
//Spring启动起来
SpringApplication.run(HelloworldApplication.class, args);
}
}
- @SpringBootApplication:Spring Boot应用标注在某个类上说明这个类是Spring Boot的主配置类,Spring Boot就应该运行这个类的main方法来启动Spring Boot应用。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
-
@SpringBootConfiguration:Spring Boot的配置类,标注在某个类上,表示这是一个Spring Boot配置类;
- @Configuration:配置类上来标注这个注解;
-
@EnableAutoConfiguration:开启自动配置功能;
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
- @AutoConfigurationPackage:自动配置包
- @Import(AutoConfigurationPackages.Registrar.class)
Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class类
将主配置类的所在包及所有子包中的所有组件扫描到Spring容器中。
- @Import(AutoConfigurationPackages.Registrar.class)
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
register(registry, new PackageImports(metadata).getPackageNames().toArray(new String[0]));
}
- @Import(AutoConfigurationImportSelector.class)
- AutoConfigurationImportSelector:导入哪些组件的选择器
将需要导入的组件以全类名的方式返回;这些组件就会添加到容器中;
会给容器中导入自动配置类(xxxAutoConfiguration)
有了自动配置类,免去了手动编写配置注入功能组件等工作;
- AutoConfigurationImportSelector:导入哪些组件的选择器
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。