启动类
1 |
|
其中有一个@SpringBootApplication注解和SpringApplication.run(SpringbootDay1Application.class, args)方法。
@SpringBootApplication注解
1 | //里面就是一个@Configuration注解 |
@SpringBootConfiguration
1 |
|
其实就是一个@Configuration注解
@EnableAutoConfiguration
1 |
|
@AutoConfigurationPackage
1 | (AutoConfigurationPackages.Registrar.class) |
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;
@Import(AutoConfigurationImportSelector.class)
1 | public String[] selectImports(AnnotationMetadata annotationMetadata) { |
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是所谓的自动装配类
SpringApplication.run()方法
1 | public static ConfigurableApplicationContext run(Class<?>[] primarySources, |
可以发现,首先会new 一个SpringApplication对象,然后再调用此对象的run方法。
new SpringApplication
1 | public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { |
这里的setInitializers()和setListeners()方法是通过SpringFactoriesLoader找到spring.factories文件中配置的ApplicationContextInitializer和ApplicationListener两个接口的实现类。
- ApplicationContextInitializer的主要目的是在ConfigurableApplicationContext做refresh之前,对ConfigurableApplicationContext实例做进一步的设置或处理。
- ApplicationListener是Spring框架对Java事件监听机制的一种框架实现。
run()
1 | public ConfigurableApplicationContext run(String... args) { |
总结
在启动方法中,调用run()方法,其中首先创建一个SpringApplication对象,然后再调用此对象的run方法,在run()方法中,先初始化一下环境,然后创建一个容器,然后将所有的组件(配置类,自定义组件,还有@SpringBootApplication注解中的自动装配的类)放入ioc容器中。