基於Xml 的IOC 容器-準備文件物件
DocumentLoader 將Bean 配置資源轉換成Document 物件的原始碼如下:
//使用標準的JAXP將載入的Bean定義資源轉換成document物件
@Override
public Document loadDocument(InputSource inputSource, EntityResolver entityResolver,
ErrorHandler errorHandler, int validationMode, boolean namespaceAware) throws Exception {
//建立檔案解析器工廠
DocumentBuilderFactory factory = createDocumentBuilderFactory(validationMode, namespaceAware);
if (logger.isDebugEnabled()) {
logger.debug("Using JAXP provider [" + factory.getClass().getName() + "]");
}
//建立文件解析器
DocumentBuilder builder = createDocumentBuilder(factory, entityResolver, errorHandler);
//解析Spring的Bean定義資源
return builder.parse(inputSource);
}
protected DocumentBuilderFactory createDocumentBuilderFactory(int validationMode, boolean namespaceAware)
throws ParserConfigurationException {
//建立文件解析工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(namespaceAware);
//設定解析XML的校驗
if (validationMode != XmlValidationModeDetector.VALIDATION_NONE) {
factory.setValidating(true);
if (validationMode == XmlValidationModeDetector.VALIDATION_XSD) {
// Enforce namespace aware for XSD...
factory.setNamespaceAware(true);
try {
factory.setAttribute(SCHEMA_LANGUAGE_ATTRIBUTE, XSD_SCHEMA_LANGUAGE);
}
catch (IllegalArgumentException ex) {
ParserConfigurationException pcex = new ParserConfigurationException(
"Unable to validate using XSD: Your JAXP provider [" + factory +
"] does not support XML Schema. Are you running on Java 1.4 with Apache Crimson? " +
"Upgrade to Apache Xerces (or Java 1.5) for full XSD support.");
pcex.initCause(ex);
throw pcex;
}
}
}
return factory;
}
上面的解析過程是呼叫JavaEE 標準的JAXP 標準進行處理。至此Spring IOC 容器根據定位的Bean 配置資訊,將其載入讀入並轉換成為Document 物件過程完成。接下來我們要繼續分析Spring IOC 容器將載入的Bean 配置資訊轉換為Document 物件之後,是如何將其解析為Spring IOC 管理的Bean 物件並將其註冊到容器中的。
相關文章
- 基於Xml 的IOC 容器-開始讀取配置內容XML
- Spring系列:基於XML的方式構建IOCSpringXML
- Spring 原始碼 (2)Spring IOC 容器 前戲準備工作Spring原始碼
- Spring基礎使用(一)--------IOC、Bean的XML方式SpringBeanXML
- 基於XML的DIXML
- 為基於意圖的網路做準備
- Spring的IOC容器Spring
- Laravel的Ioc容器Laravel
- Spring IOC XML配置SpringXML
- IoC 容器
- IOC容器
- 4、Spring IOC容器 Bean物件例項化的3種方式SpringBean物件
- XML文件XML
- Spring基於XML方式的使用SpringXML
- Spring基於註解的IoC配置Spring
- 容器環境下如何將NuGet包XML文件新增到SwaggerXMLSwagger
- Spring IOC原始碼分析之-重新整理前的準備工作Spring原始碼
- 淺析 Spring 的IOC容器Spring
- 對Spring IOC容器的思考Spring
- (5)ioc容器概述
- 手寫IOC容器
- Spring框架IOC容器Spring框架
- Spring--IOC容器Spring
- 從原始碼看Spring中IOC容器的實現(二):IOC容器的初始化原始碼Spring
- Spring中基於XML方式的AOP操作SpringXML
- 基於 DOM 的 XML 檔案解析類XML
- MyBatis基於xml檔案的 CURD案例MyBatisXML
- Spring AOP基於xml的方式實現SpringXML
- Spring IoC 容器的擴充套件Spring套件
- 基於準則匹配的影像對準
- Spring_Mybatis整合 註解配置類與xml配置檔案兩種方式分析及初始化IOC容器與監聽獲取取IOC容器SpringMyBatisXML
- 基於LINUX7的21C單機 標準化實施文件Linux
- 使用JAXP對xml文件進行DOM解析基礎XML
- OOD、DIP、IOC、DI、依賴注入容器(即 控制反轉容器,IOC Container)依賴注入AI
- 基於19C PDB建立方式彙總 標準化文件
- xml.etree.ElementTree 文件中文翻譯; SVG向量圖;Python標準庫XMLSVGPython
- spring boot基於Java的容器配置Spring BootJava
- 基於Dapr的 Azure 容器應用