Ioc容器初始化-bean资源定位(2)

时间:2022-04-18 21:03:40
紧接上篇:
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资源地址用数组存储起来。