spring4.0源码分析解析xml补充━━━(PluggableSchemaResolver类)
??????? 上面一篇文件讲了BeanDefinition的原理。这一篇讲spring解析xml的时候一些小特点。主要是验证,然后不同的xml名称空间会有不同的类来解析xml。解析xml,spring没有用到第三方库,而是直接使用java的api。这里是和spring解析xml类似的代码。我们从这里开始。
??????? spring解析是直接用DocumentBuilder这个类生成Document,然后通过Document得到不同的Element,并且不同的Element,为不同的方法解析。解析xml时验证的实例就会用到PluggableSchemaResolver类。
?
上面的schemaMappings就是存放url对应的xsd地址。这里是读classpath路径下所有的META-INF/spring.schemas文件。读的方法就类似下面:
@Testpublic void testMeta() throws IOException {ClassLoader cld = Thread.currentThread().getContextClassLoader();Enumeration enumURL = cld.getResources("META-INF/spring.schemas");int count = 0;while (enumURL.hasMoreElements()) {URL url = (URL) enumURL.nextElement();count++;System.out.println(url.getFile());InputStream is = url.openConnection().getInputStream();int i = is.read();while (i != -1) {System.out.print((char) i);i = is.read();}System.out.println();is.close();}System.out.println(count);}?