Red de conocimiento informático - Conocimiento del nombre de dominio - Preguntas urgentes de la entrevista sobre Java

Preguntas urgentes de la entrevista sobre Java

El principio de funcionamiento interno del contenedor Spring

AbstractoApplicationContext de Spring es una implementación abstracta de ApplicationContext. El método de actualización () de la clase abstracta define varios procesos del contenedor Spring después de cargar el archivo de configuración. Acciones de resorte realizadas cuando se inicia el contenedor. A continuación, echemos un vistazo a la lógica de ejecución definida dentro de refresco ():

1. Inicialice BeanFactory: cree una instancia de BeanFactory de acuerdo con el archivo de configuración, y el método getBeanFactory () se implementa mediante una subclase específica. En este paso, Spring cargará la información del archivo de configuración en el Registro de definición de beans del contenedor (BeanDefinitionRegistry), pero el bean aún no se ha inicializado;

2 Llame al posprocesador de fábrica: según El mecanismo de reflexión encuentra todos los beans de tipo BeanFactoryPostProcessor de BeanDefinitionRegistry y llama a su método de interfaz postProcessBeanFactory();

3. Registrar el postprocesador de Bean: busca todos los beans de tipo BeanPostProcessor de BeanDefinitionRegistry de acuerdo con el mecanismo de reflexión. registrarlos en el registro de postprocesador Bean del contenedor

4. Inicializar la fuente del mensaje: inicializar los recursos de mensajes internacionalizados del contenedor

5. locutor;

6. Inicializar otros beans especiales: este es un método de enlace que las subclases pueden usar para realizar operaciones especiales: por ejemplo, AbstractRefreshableWebApplicationContext usa este método de enlace para realizar la operación de inicialización de ThemeSource;

p>

7. Registrar detectores de eventos;

8. Inicializar beans singleton: crear instancias de todos los beans singleton y colocarlos en la caché del contenedor Spring;

9. Publicar contexto evento de actualización: cree un evento de actualización de contexto, que el transmisor del evento transmite a cada oyente de eventos registrado.

En la Sección 3.4, observamos el ciclo de vida de un Bean desde la creación hasta la destrucción, y los pasos correspondientes anteriores se pueden encontrar en estos procesos. Spring coordina múltiples componentes para completar este complejo proceso de ingeniería. La Figura 5-1 muestra el flujo de trabajo del contenedor Spring desde la carga de archivos de configuración hasta la creación de beans completos y los roles involucrados.

Figura 5-1 Canalización de IoC

1. ResourceLoader carga el archivo de configuración de Spring desde el medio de almacenamiento y usa Resource para representar los recursos del archivo de configuración;

2 .BeanDefinitionReader lee el recurso del archivo de configuración al que apunta Resource y analiza el archivo de configuración. BeanDefinitionReader lee el recurso del archivo de configuración al que apunta Resource y luego analiza el archivo de configuración.

Cada en el archivo de configuración se analizará en un objeto BeanDefinition y se guardará en BeanDefinitionRegistry;

3. El contenedor escanea BeanDefinition en BeanDefinitionRegistry y utiliza el mecanismo de reflexión de Java para identificar automáticamente el BeanFactoryPostProcessor del Bean (implementando). interfaz BeanFactoryPostProcessor), y luego llame a estos BeanFactoryPostProcessor para procesar BeanDefinition en BeanDefinitionRegistry. Complete las dos tareas siguientes:

1) Analice la etiqueta del elemento utilizando marcadores de posición para obtener el valor de configuración final, lo que significa procesar algunos objetos BeanDefinition semiacabados y obtener el objeto BeanDefinition terminado;

2) Analice BeanDefinitionRegistry en el escaneo de BeanDefinitionRegistry y descubra todos los editores de propiedades del bean a través del mecanismo de reflexión de Java (BeanDefinitionRegistry que implementa la interfaz java.Bean.PropertyEditor). El contenedor Spring obtiene el BeanDefinition procesado de BeanDefinitionRegistry y llama a la estrategia de instanciación (InstantiationStrategy) para comenzar el trabajo de instanciar el Bean.

5. Al crear una instancia del Bean, el contenedor Spring usa BeanWrapper para encapsular el Bean; BeanWrapper proporciona una gran cantidad de mecanismos de reflexión Java para operar métodos Bean. Combinará BeanDefinition y el editor de atributos en el contenedor para completar el trabajo de configuración de atributos Bean;

6. contenedor (implementa la interfaz BeanPostProcessor Bean) El bean que ha completado el trabajo de configuración de propiedades se procesará más tarde y se ensamblará directamente en un bean listo.

El contenedor Spring es de hecho una máquina bien diseñada con una gran cantidad de componentes y equipos en su interior. La brillantez de Spring es que utiliza muchas interfaces para describir el modelo de todos los dispositivos, construye un buen esqueleto para Spring y luego lo enriquece progresivamente capa por capa a través del sistema de herencia, lo que finalmente convierte a Spring en un marco completo de carne y hueso. Por lo tanto, al observar el código fuente del marco Spring, hay dos hilos claramente visibles:

1) La capa de interfaz describe los componentes importantes en el contenedor y la relación de colaboración entre los componentes

<; p>2) el sistema de herencia realiza las funciones de los componentes paso a paso.

La capa de interfaz describe claramente la funcionalidad de alto nivel del marco Spring, el marco contextual. Con la descripción abstracta de la capa de interfaz, no solo Spring en sí puede proporcionar implementaciones específicas, sino que cualquier organización de terceros también puede proporcionar diferentes implementaciones. Se puede decir que la capa de interfaz completa de Spring garantiza la escalabilidad del marco. El sistema de herencia vertical se expande gradualmente para implementar las funciones del marco paso a paso. Este esquema de implementación garantiza que las funciones del marco no se acumularán en ciertas clases, lo que provocará una carga lógica de código excesiva y descompondrá perfectamente la complejidad del. estructura.

Los componentes Spring se pueden dividir en dos categorías según sus funciones:

1) Componentes materiales: Resource, BeanDefinition, PropertyEditor y beans finales, etc., que se procesan durante el procesamiento. procesan y consumen componentes, al igual que los materiales que se procesan en la línea de ensamblaje;

2) Los componentes del equipo de procesamiento: ResourceLoader, BeanDefinitionReader, BeanFactoryPostProcessor, InstantiationStrategy y BeanWrapper y otros componentes son como equipos de procesamiento en diferentes partes de la Línea de montaje, procesamiento de materiales y componentes.

Introdujimos los recursos y el componente ResourceLoader en el Capítulo 3. En este capítulo, presentamos otros componentes.

Fuente://xujar/archive/2008/10/31/3193975.aspx.