Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis del código fuente de Spring (1): implementación básica de contenedores

Análisis del código fuente de Spring (1): implementación básica de contenedores

Spring usa JavaBeans básicos para completar cosas que antes solo podía hacer EJB. Es una arquitectura en capas. Para crear un bean en Spring, debe leer, analizar y verificar el archivo de configuración y luego registrar y crear el bean. Spring es un contenedor de beans cuya función principal es administrar objetos bean (clases Java simples) para nosotros. No importa cuán poderoso sea el marco, todavía necesitamos brindarles a los programadores cierta información necesaria (como información sobre las clases de objetos de bean administrados, si se debe activar el escaneo de componentes, etc.). Esto es lo que llamamos la configuración del marco Spring. El método de configuración principal actual es utilizar un archivo de configuración o anotaciones.

Hay dos clases principales en Spring: DefaultListableBeanFactory y XmlBeanDifinitionReader. DefaultListableBeanFactory es la parte central de toda la carga de beans. Es la implementación predeterminada del registro y carga de beans de Spring. XmlBeanDefinitionReader utiliza principalmente el atributo de lector para leer y registrar archivos de recursos.

La lectura del archivo de configuración XML es una función importante de Spring. La mayoría de las funciones de Spring utilizan la configuración como punto de entrada. XmlBeanFactory hereda de DefaultListableBeanFactory. A diferencia de DefaultListableBeanFactory, XmlBeanFactory utiliza un lector XML personalizado XmlBeanDefinitionReader, que se utiliza principalmente para leer BeanDefinition de documentos XML e implementar una lectura personalizada de BeanDefinitionReader, e implementar ConfigurableListableBeanFactory. y y BeanDefinitionRegistry interfaces.

La lectura del archivo de configuración de Spring está encapsulada por ClasaPathResource, por ejemplo: new ClassPathResource("bean.xml"). En Java, la lógica de leer recursos de diferentes fuentes se abstrae en URL registrando diferentes controladores para manejar las URL. Generalmente, los tipos de controladores usan diferentes prefijos. Las URL no definen rutas relativas de forma predeterminada ni proporcionan métodos para verificar los recursos. Por lo tanto, Spring necesita usar sus recursos internos para crear su propia estructura abstracta y usar la interfaz de recursos para encapsular el subyacente. recursos.

La interfaz Resource hereda de InputStreamSource (que encapsula cualquier clase que devuelva un InputStream).

La interfaz de recursos abstrae todos los recursos subyacentes utilizados internamente por Spring y define tres métodos para determinar el estado actual de los recursos: existe, isReadable e isOpen. A través de la interfaz de recursos, todos los recursos se pueden procesar de manera uniforme. La implementación de ClassPathResource se llama a través de los métodos subyacentes proporcionados por la clase o el cargador de clases. Esto completa la encapsulación de los recursos del archivo de configuración.

Cuando la clase relacionada con recursos complete la encapsulación del archivo de configuración, el siguiente XmlBeanDefinitionReader completará la lectura del archivo de configuración.

Existen dos modos de validación para archivos XML: DTD y XSD (modo XML).

Una DTD o Definición de Tipo de Documento es un lenguaje de esquema de restricciones XML y un mecanismo de validación para documentos XML. Es una forma eficaz de garantizar que el documento XML esté bien formado. Puede comparar el documento XML con el archivo DTD para ver si el documento cumple con la especificación y si los elementos y etiquetas se utilizan correctamente. Un archivo DTD contiene reglas que definen elementos, reglas que definen relaciones entre elementos, atributos que se pueden usar con elementos y reglas de entidades o símbolos que se pueden usar. Para utilizar el modo de validación DTD, debe declararlo en el encabezado del archivo XML.

El lenguaje del esquema XML es XSD. El esquema XML describe la estructura de un documento XML. Los documentos XML se pueden validar utilizando un esquema XML específico para comprobar si el documento XML cumple con los requisitos. El esquema XML en sí es un documento XML que se ajusta a la estructura de sintaxis XML y puede ser analizado por analizadores XML normales.

Para validar una instancia XML utilizando un documento de esquema XML, declara un espacio de nombres y especifica dónde se almacena el documento de esquema XML correspondiente al espacio de nombres. La dirección de almacenamiento del documento de esquema XML correspondiente al espacio de nombres se especifica mediante el atributo SchemaLocation (1. La URL del espacio de nombres; 2. La dirección o dirección URL del documento de esquema XML identificado por el espacio de nombres).

?Además, el modo de validación se establece mediante el método setValidationMode en XmlBeanDefinitionReader. El método que utiliza Spring para detectar el esquema de validación es en realidad determinar si contiene un DOCTYPE; de ser así, es un DTD; de lo contrario, es un XSD.

El archivo XML se valida mediante el esquema de validación y el DocumentLoader lo analiza en el documento correspondiente. Durante el proceso de análisis, hay un enlace: (EntityResolver) que busca la definición de DTD correspondiente en función de la declaración para validar el documento. También puede establecer una definición de DTD a través de setEntityResolver. EntityResolver se utiliza para recibir los dos parámetros publicId y systemId. Para archivos en formato xsd, publicId suele estar vacío. Utilice diferentes analizadores para diferentes modos de validación para analizar y convertir documentos en archivos de documentos para extraer y registrar beans. BeanDefinitionDocumentReader procesa internamente el archivo del documento y extrae la raíz como parámetro para continuar con el registro de BeanDefinition.