Почему java DocumentBuilder нужно создать 2 шага, а не 1? - PullRequest
0 голосов
/ 03 декабря 2018

Используя Dav's 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");
}

Это странно для меня:

  1. В заводском режиме обычно используется статическая фабрика, затем используйте factory.create для генерации «продукта».Это принцип протокола JAXP, чтобы иметь фабрику?

  2. Пока эта фабрика документов является частью java sdk, почему ей все еще нужно "FactoryFinder.find ()", чтобы найти некоторыеклассы, которые могут генерировать такую ​​фабрику?

Спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Этот подход позволяет изменить реализацию фабрики через конфигурацию, если по какой-то причине вам нужно использовать собственную фабрику (например, если вы столкнулись с ошибкой в ​​стандартной фабрике JDK).

* 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.
...