每个SpringBoot应用程序,都有1个主类,主类中包括main(),main()中调用SpringApplication的静态方法run()来启动SpringBoot应用程序。主类上会标注@SpringBootApplication注解,它是1个组合注解,底层相当于3个注解:@ComponentScan、@EnableAutoConfiguration和@Configuration
(1)@ComponentScan,扫描主类所在包路径下的所有标注@Component的Bean并进行装配,包括@Component的子类@Controller、@Service和@Dao
(2)@EnableAutoConfiguration,开启自动配置,可以根据classpath和Bean定义自动配置。在SpringBoot auto-config jar包的META-INF文件夹中有1个spring.factories文件,该文件包括一系列的KV,K为注解的全额限定名,V为当使用注解时,需要自动配置的Bean。SpringBoot就是使用这种方式完成自动配置
(3)@Configuration,Spring4的新注解,相当于在xml配置文件中配置Bean。标注@Configuration的类中包括1个或多个使用@Bean注解声明的对象,@Configuration会将它们注入的Spring容器
(1)Spring Boot应用程序主类main()会调用SpringApplication类的run(),该方法先创建1个SpringApplication对象;创建SpringApplication对象时,会执行它的初始化方法initialize(),initialize()会对SpringApplication赋一些初值,例如根据当前classpath下是否有Servlet判断应用程序是WEB应用程序还是非WEB应用程序;初始化后,执行SpringApplication对象的run(),在这个方法中创建ApplicationContext上下文环境,设置监听器等