自动配置: pom.xml
spring-boot-dependences核心依赖在父工程中我们在写或者引入springboot依赖的时候,不需要指定版本,就因为有这些版本仓库 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>启动器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 启动器:说白了就是SpringBoot的启动场景比如spring-boot-starter-web,它会帮我们导入web环境所有的依赖springboot将一个个应用场景,变成了一个个启动器主程序 @SpringBootApplication:springboot应用注解标记在类上表示此类是SpringBoot的主配置类,就应该运行此类的main方法来启动springboot程序
@SpringBootApplication public class HellosbApplication { public static void main(String[] args) { SpringApplication.run(HellosbApplication.class, args); } } @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} )} ) public @interface SpringBootApplication {@SpringBootConfiguration:SpringBoot的配置类。 标注在某个类上,表示springboot的配置类
@Configuration 配置类上来标注这个注解 配置类也是一个组件,@Component
@EnableAutoConfiguration:开启自动配置功能; 以前需要我们自己配置,现在Springboot帮我们自动配置
@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { @AutoConfigurationPackage:自动配置包 @Import({AutoConfigurationPackages.Registrar.class}) public @interface AutoConfigurationPackage { String[] basePackages() default {}; Class<?>[] basePackageClasses() default {}; } @Import:spring的底层注解,给容器中导入一个组件在Registrar类中有这个方法
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { AutoConfigurationPackages.register(registry, (String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0])); }new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames() 返回值: springboot主配置类所在的包名
结论:将主配置类(@SpringBootApplication) 所在包以及子包下的所有组件扫描到srping容器中
@Import({AutoConfigurationImportSelector.class}) 给容器导入组件, AutoConfigurationImportSelector:自动配置导入选择器 这个类会将所有需要的组件以全类名的方式返回,这些组件将被扫描到容器中,会给容器扫描很多配置类,就是给容器导入这个场景下所有需要的组件。