文章目录
一、@SpringBootApplication -- SpringBoot的核心注解
二、SpringApplication的执行流程
三、SpringApplication的扩展点web
一、@SpringBootApplication -- SpringBoot的核心注解
@SpringBootApplication 内含3个子注解:spring
1.一、@Configuration
该注解用于JavaConfig中,被该注解标注的表示,该类是个配置类。app
1.二、@ComponentScan
自动扫描注解,扫描路径下的组件或者Beanide
1.3@EnableAutoConfiguration
@EnableAutoConfiguration是个复合注解,源代码以下spring-boot
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({EnableAutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
@EnableAutoConfiguration 最关键的是@Import({EnableAUtoConfigurationImportSelector.class}) 注解。
该注解的功能是帮助SpringBoot应用将全部符合条件的@Configuration配置都加载到当前SpringBoot应用spa
1.4自动配置的幕后英雄:SpringFactoriesLoader
该类的做用是加载SpringBoot应用下META-INF/spring.factories配置文件。该配置文件是一个Properties文件。
在spring-boot 和 spring-boot-autoconfig 的META-INF/spring.factories中定义了自动配置的类code
1.5@EnableAutoConfiguration综述
经过1.三、1.4的描述。@EnableAutoConfiguration的做用能够描述为:从classpath下搜寻全部的META-INF/spring.factories配置文件,并将EnableAutoConfiguration对应的配置项经过反射实例化为对应标注了@Configuration的IoC容器配置类,而后汇总为一个并加载到IoC容器中blog
二、SpringApplication的执行流程事件
2.一、SpringApplication在实例化以前
2.1.一、SpringApplication在实例化以前会根据你的应用决定建立web类型或者是标准的ApllicationContext
2.1.二、使用SpringFactoriesLoader在classpath下查找并加载全部可用的ApplicationContextInitializer
2.1.三、使用SpringFactoriesLoader在classpath下查找并加载全部可用的ApplicationListener图片
2.二、SpringApplication实例化完成并设置以后
一、经过SpringFactoriesLoader加载SpringApplicationRunListener(建立监听器)
二、建立应用须要的Environment(建立应用所需环境)
三、Environment建立完毕,SpringApplicationRunListner调用environmentPrepared()。(通知完毕)
四、根据当前应用建立ApplicationContext
五、调用ApplicationContextInitialzer,对ApplicationContext进一步处理(进一步处理)
六、处理完毕,SpringApplicationRunListner调用contextPrepared().(通知完毕)
七、将以前经过@EnableAutoConfiguration获取的全部配置以及其余形式的IoC容器配置加载到已经准备完毕的ApplicationContex
八、SpringApplicationRunListener调用contextLoader()。(通知完毕)
九、调用ApplicationContext的refresh()。完成IoC容器能够的最后一道程序
十、调用SpringApplicationRunListener的finish()。(通知完成)
三、SpringApplication的扩展点
一、SpringApplicationRunListner(事件通知的监听者)
实现请参考-->默认实现类--EventPublishingRunListener
二、ApplicationListener(监听某类事件的发生)
Demo:
public class Listener implements ApplicationListener<ContextRefreshEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { } }
三、ApplicationContextInitializer(进一步处理ApplicationContext)
Demo
public class Demo implements ApplicationContextInitializer { @Override public void initialize(ConfigurableApplictionContext application) }
四、CommandLineRunnerCommandLineRunner的执行点在main方法执行完成以前最后一步SpringBoot中的全部CommandLineRunner都会被加载执行CommandLinerRunner 最好使用@Ordered注解标注顺序