Qué libro es mejor para el análisis del código fuente de SpringPasos de análisis: 1. Cargue web.xml, cargue el oyenteorg.springframework.web.context.ContextLoaderListener 2. ContextLoaderListener inicializa el método initWebApplicationContext y crea el objeto org.springframework.web.context.support.XmlWebApplicationContext. Objeto XmlWebApplicationContext 3. XmlWebApplicationContext llama al método loadBeanDefinitions. Este método hace principalmente dos cosas: inicializa XmlBeanDefinitionReader, obtiene la ruta del archivo de configuración applicationContext.xml y luego entrega el contenido al contenido del mismo. ruta del archivo de configuración xml, leer el contenido del archivo de configuración, obtener un flujo de entrada, realizar operaciones de código en el flujo de entrada y luego encapsularlo en un objeto inputSource y luego encapsularlo en un objeto de documento mientras se genera el objeto de documento; Un objeto de recurso. Estos dos objetos se dividen en: el objeto de documento contiene la información de contenido principal del archivo de configuración y el recurso contiene la información de descripción y cierta información de verificación del archivo de configuración. Luego cree un XmlReaderContext a partir del objeto Recurso. Después de completar las operaciones anteriores, XmlBeanDefinitionReader entregará el objeto del documento y el objeto XmlReaderContext a DefaultBeanDefinitionDocumentReader para su procesamiento. 5. DefaultBeanDefinitionDocumentReader 1) Decore el XmlReaderContext en un objeto BeanDefinitionParserDelegate 2) Recorra el objeto del documento, divida el objeto del documento en elementos Element y analice. uno por uno; 3), use el objeto decorado por BeanDefinitionParserDelegate para analizar el elemento o etiqueta Element.
if (absoluteLocation) { try { int importCount = getReaderContext().getReader().loadBeanDefinitions(ubicación, actualResources); if (logger.} catch ( BeanDefinitionStoreException ex) { getReaderContext().error("Error al importar definiciones de beans desde la URL ubicación [" + ubicación + "]", ele, ex); } } else { // Sin URL -&Sin URL -&Sin URL -&Sin URL -&Sin URL -&Sin URL -&Sin URL -&Sin URL -&Sin URLtry { int importCount ; Recurso relativoResource = getReaderContext().getResource().createRelative(ubicación); if (relativeResource.exists()) { importCount = getReaderContext().getReader().loadBeanDefinitions(relativeResources.getResource().getURL()); .toString(); importCount = getReaderContext().getReader().loadBeanDefinitions( relativoResources.add(relativeResource); else { String baseLocation = getReaderContext().applyRelativePath( baseLocation, ubicación), actualResources } logger.isDebugEnabled()) { logger.debug("Importado " + importCount + " Definiciones de Bean desde la ubicación relativa [" + ubicación + "]"); captura (IOException ex).} catch (IOException ex) { getReaderContext( ).error("Error al resolver la ubicación actual del recurso", ele, ex); }} catch (BeanDefinitionStoreException ex) { getReaderContext().error("Error al importar definiciones de beans desde la ubicación relativa [" + ubicación + "]", ele, ex); } }}}ResourceContext().error("Error al importar definiciones de beans desde la ubicación relativa [" + ubicación + "]", ele, ex } }.ele, ex); [] actResArray = recursoactual