@SpringBootApplication+run()方法--加载一个应用所需要的所有资源和配置,最后启动一个应用实例;
run()方法--
public ConfigurableApplicationContext run(String... args)
run()方法主要创建一个应用上下文实例(应用上下文其实就是一个SpringBean工厂),这里具体的是创建了一个ConfigurableApplicationContext实例;
而Spring工厂的创建需要注册相应的beandefiniton,所以需要加载关于bean的定义相关配置;
这里通过load方法实现这一操作--
protected void load(ApplicationContext context, Object[] sources) {
if (logger.isDebugEnabled()) {
logger.debug("Loading source " + StringUtils.arrayToCommaDelimitedString(sources));
}
BeanDefinitionLoader loader = createBeanDefinitionLoader(getBeanDefinitionRegistry(context), sources);
if (this.beanNameGenerator != null) {
loader.setBeanNameGenerator(this.beanNameGenerator);
}
if (this.resourceLoader != null) {
loader.setResourceLoader(this.resourceLoader);
}
if (this.environment != null) {
loader.setEnvironment(this.environment);
}
loader.load();
}
load()方法在preparecontext()方法中调用--
然后调用了applicationcontext的refresh() 方法,用来重启Spring工厂;
--加载bean定义就是创建beandefinition实例;---不是bean;
自动配置原理--约定大于配置
其中@EnableAutoConfiguration启动自动配置并导入相关的配置类;
@ComponentScan用来扫描和加载自定义配置
@EnableAutoConfiguration最终会导入一个自动配置类的列表;
未完待续___
(加载自动配置的具体实现代码流程以及如何何时使用这些自动配置来启动应用上下文,)