Так что давайте предположим, что хотим преобразовать XSLT и хотим использовать.Какой уровень стоял за возможностями подключения JAXP?
TransformerFactory transFact = TransformerFactory.newInstance(); (1)
Так что newInstance() создает объект из абстрактного класса, что невозможно в Java. ТАК, что происходит? Как Java меняет реализацию. Я знаю, что вы можете использовать directlly
TransformerFactory transFact = new org.apache.xalan.processor.TransformerFactoryImpl();
но здесь мы имеем экземпляр неэкстремального класса. Или мы можем использовать
System.setProperty("javax.xml.transform.TransformerFactory",
"net.sf.saxon.TransformerFactoryImpl");
или даже реализация по умолчанию (1) от com.sun.org.apache.xalan.internal.xsltc.trax;
Разработанный, чтобы быть гибким, JAXP позволяет использовать любой XML-совместимый анализатор из вашего приложения. Он делает это с так называемым слоем подключаемости, который позволяет подключать реализацию SAX или DOM API . Уровень подключаемости также позволяет подключать XSL-процессор , позволяя вам контролировать, как отображаются ваши XML-данные.
Как работает этот слой? Могу ли я написать такое в своем приложении? Создать instace абстрактного класса?
Они никогда не создают экземпляр абстрактного класса, а только экземпляр класса, который * расширяет * абстрактный класс. Весь этот слой конфигурации вокруг него должен указывать, какой класс необходимо создать, когда запрашивается экземпляр абстрактного класса. – dasblinkenlight