LocalizedResourceHelper类核心方法只有一个findLocalizedResource(String name, String extension, @Nullable Locale locale),即根据资源名,后缀,读取对应Locale下的资源文件,会按照如下图所示顺序查找文件。
PropertiesLoaderSupport类提供了根据资源位置location读取属性以及合并多个Properties的方法。
ResourceArrayPropertyEditor类提供了将单个资源路径或者一组资源路径转化成Resource[]的方法,通过StandardEnvironment解析资源路径中的${}参数,通过PathMatchingResourcePatternResolver读取资源路径。具体用法参考如下测试用例:
@Test
public void testPatternResource() throws Exception {
PropertyEditor editor = new ResourceArrayPropertyEditor();
editor.setAsText("classpath*:org/springframework/core/io/support/Resource*Editor.class");
Resource[] resources = (Resource[]) editor.getValue();
assertNotNull(resources);
assertTrue(resources[0].exists());
editor.setValue(new String[]{"classpath*:org/springframework/core/io/support/Resource*Editor.class"});
resources = (Resource[]) editor.getValue();
assertNotNull(resources);
assertTrue(resources[0].exists());
}
ResourcePatternUtils提供了判断路径是否是"classpath" 或者"classpath*"开头的方法,提供了获取ResourcePatternResolver实现类的方法。
SpringFactoriesLoader类提供了加载META-INF/spring.factories中的配置的类的方法,具体实现是解析配置文件然后用反射构造目标实例并返回,测试用例如下:
@Test
public void loadFactoriesInCorrectOrder() {
List<DummyFactory> factories = SpringFactoriesLoader
.loadFactories(DummyFactory.class, null);
assertEquals(2, factories.size());
assertTrue(factories.get(0) instanceof MyDummyFactory1);
assertTrue(factories.get(1) instanceof MyDummyFactory2);
}
META-INF/spring.factories配置
org.springframework.core.io.support.DummyFactory=\
org.springframework.core.io.support.MyDummyFactory2,\
org.springframework.core.io.support.MyDummyFactory1