概述
前面理清了spring xml 方式BeanDefinition方式注册方式及单例BeanDefinition的实例化和初始化,下面将按重要方法来详细讲解
方法
// 源代码详细位置
org.springframework.context.support.ClassPathXmlApplicationContext#ClassPathXmlApplicationContext(java.lang.String[], boolean, org.springframework.context.ApplicationContext)
两个重要方法
// 第一个
super(parent);
// 第二个
setConfigLocations(configLocations);
super(parent)
// 代码重要位置
// 解析带有*等通配符路径的资源文件
org.springframework.context.support.AbstractApplicationContext#AbstractApplicationContext()
ResourcePatternResolver (Strategy interface for resolving a location pattern (for example, an Ant-style path pattern) into {@link Resource} objects.) 解决本地资源匹配的策略接口,例如 ant路径适配
小知识补充 ant通配符有三种
通配符 | 说明 |
---|---|
? | 匹配任何单字符 |
* | 匹配0或者任意数量的字符 |
** | 匹配0或者更多的目录,多层路径,等价于*/*/… |
PathMatchingResourcePatternResolver 这个类重要,ResourcePatternResolver上面有比较详细的解释,实际上传的是ClassPathXmlApplicationContext对象,ClassPathXmlApplicationContext实现了ResourceLoader接口 ,所以复用了ResourceLoader默认实现类的功能
/**
* Return the ResourcePatternResolver to use for resolving location patterns
* into Resource instances. Default is a
* {@link org.springframework.core.io.support.PathMatchingResourcePatternResolver},
* supporting Ant-style location patterns.
* 此处返回用于解析本地匹配的资源对象,默认使用 PathMatchingResourcePatternResolver支持
* Ant-style 本地匹配
*/
protected ResourcePatternResolver getResourcePatternResolver() {
return new PathMatchingResourcePatternResolver(this);
}
/**
* Set the parent of this application context.
* 设置父类上下文环境,一般是没有的
*/
@Override
public void setParent(@Nullable ApplicationContext parent) {
this.parent = parent;
if (parent != null) {
Environment parentEnvironment = parent.getEnvironment();
if (parentEnvironment instanceof ConfigurableEnvironment configurableEnvironment) {
getEnvironment().merge(configurableEnvironment);
}
}
}
setConfigLocations(configLocations);
此方法主要设置了属性解析(占位符)及系统环境变量的加载
// PropertySourcesPropertyResolver
// customizePropertySources(propertySources);
setConfigLocations(configLocations);
获取环境对象,没有就创建一个
getEnvironment()中加载了系统属性及环境变量值
resolveRequiredPlaceholders(String text) 方法;属性解析及占位符赋值相关对象初始化
结束
对应重要的接口,可以深入的了解一下源码注释,有利于对其实现类有个清晰的脉络