JAXP是如何在底层工作的
java用DOM方式解析XML时,首先需要获得DOM解析工厂,然后获得DOM解析器,即:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
但是newDocumentBuilder的源码实现如下:
public abstract DocumentBuilder newDocumentBuilder() throws Parser
ConfigurationException;
所以不知道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() 干了啥。
------解决方案--------------------
------解决方案--------------------这就是一个工厂方法模式。abstract DocumentBuilder newDocumentBuilder() 是抽象方法,说明DocumentBuilderFactory 有一系列的工厂,每个工厂生产自己的DocumentBuilder。DocumentBuilder是接口,newDocumentBuilder()返回的是具体的工厂(newInstance()的返回值)生产的DocumentBuilderImpl。