0%

SpringApplication解析

成员解析

primarySourcessources

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class SpringApplication {

//...

private Set<Class<?>> primarySources;

private Set<String> sources = new LinkedHashSet<>();

//...

public void addPrimarySources(Collection<Class<?>> additionalPrimarySources) {
this.primarySources.addAll(additionalPrimarySources);
}

public void setSources(Set<String> sources) {
Assert.notNull(sources, "Sources must not be null");
this.sources = new LinkedHashSet<>(sources);
}
}

primarySources与sources最直观的区别就是一个是Class集合,一个是String集合,但是两个变量
都是用来构建ApplicationContext。另一个则是,primarySources可以追加,但是sources则会被
后一个sources覆盖。

ApplicationContextFactory - 初始化ApplicationContext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   // SpringApplication.class
protected void load(ApplicationContext context, Object[] sources) {
if (logger.isDebugEnabled()) {
logger.debug("Loading source " + StringUtils.arrayToCommaDelimitedString(sources));
}
// BeanDefinitionLoader是用于load环境的帮助类
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();
}

BeanDefinitionLoader -