紧接上篇:
2-setConfigLocations(
configLocations
);
方法如下:
public void setConfigLocation(String location ) { setConfigLocations(StringUtils. tokenizeToStringArray(location, CONFIG_LOCATION_DELIMITERS )); } public void setConfigLocations(String... locations) { if (locations != null) { Assert. noNullElements(locations, "Config locations must not be null"); this. configLocations = new String[locations.length ]; for ( int i = 0; i < locations. length; i++) { this. configLocations[i] = resolvePath(locations[i]).trim(); } } else { this. configLocations = null; } }
解释:
String... locations 代表可变个数的String数组。
location就是bean资源文件的路径。
这里重载了两个setConfigLocation方法,当location只一个参数的时候,把当前这个location 通过“,; /t/n” 分割成一个string数组调用下面的那个setConfigLocation方法,
CONFIG_LOCATION_DELIMITERS
= ",; /t/n" (中间有空格,是5个符号)。
可以看到这个方法把所有的locations分别存入configLocations[i]这个数组中。
resolvePath方法把字符串解析为路径。
所以我们其实可以这样:
ClassPathXmlApplicationContext("a.xml,b.xml...");
ClassPathXmlApplicationContext(new String[]{"a.xml","b.xml",...});
都是可以的。
总结一下bean资源的定位:
第一步把自身对象设置为一个资源加载器,生成了实现了ResourcePatternResolve接口的PathMatchingResourcePatternResolve对象。
第二步把传入的bean资源地址用数组存储起来。