日期:2014-05-20  浏览次数:20788 次

JAXP是如何在底层工作的
java用DOM方式解析XML时,首先需要获得DOM解析工厂,然后获得DOM解析器,即:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

但是newDocumentBuilder的源码实现如下:
public abstract DocumentBuilder newDocumentBuilder() throws ParserConfigurationException;
所以不知道builder到底是怎样new出来的。

通过System.out.println(builder.getClass().getName())发现builder对象为:com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl
这下更加迷惑了,怎么成了DocumentBuilderImpl对象?

百度Google之后初步得出这跟jaxp的实现有关,但还是不太清楚具体的实现方式,希望熟悉这方面的牛人coder们能不吝教诲,谢谢!

------解决方案--------------------
凡事要从源头抓起

你应该先去研究下 factory 究竟是个啥?
System.out.println(factory.getClass());


进而再去研究下:DocumentBuilderFactory.newInstance() 干了啥。
------解决方案--------------------
探讨

你是咋看的?

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
System.out.println(factory.getClass());
这两句话应该输出:class com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactor……

------解决方案--------------------
这就是一个工厂方法模式。abstract DocumentBuilder newDocumentBuilder() 是抽象方法,说明DocumentBuilderFactory 有一系列的工厂,每个工厂生产自己的DocumentBuilder。DocumentBuilder是接口,newDocumentBuilder()返回的是具体的工厂(newInstance()的返回值)生产的DocumentBuilderImpl。