主程序类、主入口类
@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} )} ) public @interface SpringBootApplication {
@SpringBootConfiguration:spring boot的配置类
标注在某个类上,表示这是一个spring boot的配置类;
@Configuration:配置类傻瓜 来标志这个注解;
配置类----配置文件 配置类也是容器中的一个组件 @Component
@EnableAutoConfiguration:开启自动配置
以前我们需要的东西 spring boot自动帮我们配置,@EnableAutoConfiguration告诉spring boot开启自动配置功能,这样自动配置才能生效
@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {};
@AutoConfigurationPackage:自动配置包
@Import({AutoConfigurationPackage.Registrar.class})
spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackage.Registrar.class;
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;
@Import({AutoConfigurationImportSelector.class})
给容器中导入组件?
EnableAutoConfigurationImportSelector:导入哪些组件的选择器;
将所有需要导入的组件以全雷鸣的方式返回;这些组件就会被添加到容器中;
会给容器中导入非常多的自动配置类(xxxAutoConfiguration):就是给容器中导入这个场景所需要的所有组件,并配置好这些组件