为什么java DocumentBuilder需要创建两个步骤,而不是一个步骤?

为什么java DocumentBuilder需要创建两个步骤,而不是一个步骤?,java,dom,factory,document,builder,Java,Dom,Factory,Document,Builder,使用DOM的javax.xml.parsers,我必须编写如下代码: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); 我检查了它的jdk源代码: public static DocumentBuilderFactory newInstance() { return FactoryFi

使用DOM的javax.xml.parsers,我必须编写如下代码:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
我检查了它的jdk源代码:

public static DocumentBuilderFactory newInstance() {
    return FactoryFinder.find(
            /* The default property name according to the JAXP spec */
            DocumentBuilderFactory.class, // "javax.xml.parsers.DocumentBuilderFactory"
            /* The fallback implementation class name */
            "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
}
我觉得很奇怪:

  • 工厂模式通常是静态工厂,然后使用factory.create生成“产品”。有工厂是JAXP协议的原则吗

  • 既然这个文档工厂是JavaSDK的一部分,为什么它还必须“FactoryFinder.find()”才能找到一些可以生成这样一个工厂的类


  • 谢谢

    如果出于某种原因您需要使用自定义工厂(例如,如果您在JDK标准工厂中遇到错误),此方法用于允许通过配置更改工厂实现


    我搜索了$JAVA_主页,没有找到lib/jaxp.properties。我的问题是,如果DocumentBuilderFactory newInstance()引用了一个固定的类名,如何配置它?@HindForsum
    com.sun.org.apache.xerces.internal.jaxp.documentbuilderfactorympl
    是默认的回退,如果properties类中或使用
    -Djavax.xml.parsers.DocumentBuilderFactory=…
    方法中没有提供其他实现,则将使用它。奇怪的是,只要类本身是“DocumentBuilderFactory”,它怎么能“找不到”DocumentBuilderFactory类本身,然后回退到apache实现?谢谢。
    DocumentBuilderFactory
    是一个接口,这是一个实际的实现,可以完成这些工作。这就是为什么JVM寻找接口的实现并回退到apache的实现。
    * Use the properties file "lib/jaxp.properties" in the JRE directory.
     * This configuration file is in standard <code>java.util.Properties
     * </code> format and contains the fully qualified name of the
     * implementation class with the key being the system property defined
     * above.