@springbootapplication注解标注在类中,这个类作为spring boot的主配置类
运行spring boot需要运行这个类的main方法。
@SpringBootApplication public class FirstApp { public static void main(String args[]) { //spring应用启动起来 SpringApplication.run(FirstApp.class, args); } }
按着ctrl点击@springbootapplication
会看到以下一系列注解。
@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 ,会跳转到这个类
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
@configuration: 配置类中标注这个注解
用配置类代替-------配置文件;继续点击@configuration,会跳转到
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Configuration { ... }
配置类也是容器的一个组件,@Component
@EnableAutoConfiguration:开启自动配置功能
点击这个配置,看到跳转到另一个类中,找到这些配置
以前需要配置的,spring boot帮助我们配置,开启自动配置功能。需要配置@EnableAutoConfiguration
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { }
看到@AutoConfigurationPackage:自动配置包,点击这个注解会看到
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import(AutoConfigurationPackages.Registrar.class) public @interface AutoConfigurationPackage { } 这个就是spring的底层注解
按住ctrl点击Registrar跳转到
metadata是注解的原信息。
@Import(AutoConfigurationPackages.Registrar.class)
将主配置类,也就是@springbootapplication配置的类的所在包及下所有自包所有组件扫描到spring容器中。
@Import(AutoConfigurationImportSelector.class) 导入包选择器。
将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中
会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景所需要的所有组件,并配置好这些组件;
有了自动配置类,免去了手动配置和注入组件;
J2EE整体整和解决方案和自动配置都在spring-boot-autoconfiguration-2.0.1.release.jar