El proceso de inicialización del contenedor Spring IOC

La inicialización del contenedor IoC son los cuatro procesos de localizar, cargar, analizar y registrar el Recurso que contiene información de BeanDefinition Finalmente, el bean que configuramos existe en el contenedor IoC, es decir, la memoria con la estructura de datos beanDefinition. No hay una inyección de dependencia de beans involucrada aquí, solo la carga de definiciones de beans. Pero hay excepciones. Hay una configuración preinstanciada cuando se usa el contenedor Ioc, es decir, el atributo lazyinit se establece en la definición del bean, luego el bean se carga previamente cuando se inicializa el contenedor Ioc, y no es necesario esperar hasta que se inicialice el Ioc. Solo se activará cuando getBean. Entre ellos, refresh () inicia la inicialización del contenedor Ioc.
imagen

El primer proceso es el proceso de posicionamiento de recursos.

Este posicionamiento de recursos se refiere al posicionamiento de recursos de BeanDefinition, que ResourceLoader completa a través de una interfaz de recursos unificada. Este recurso proporciona una interfaz unificada para el uso de varias formas de BeanDefinition. Creo que todo el mundo estará familiarizado con la existencia de estas BeanDefinitions. Por ejemplo, la información de definición de Bean en el sistema de archivos se puede abstraer usando FileSystemResource; el ClassPathResource mencionado anteriormente se puede usar en la ruta de clases, y así sucesivamente. Este proceso es similar al proceso de buscar datos en un recipiente, como llenar un balde con agua para encontrar el agua.

La segunda parte clave es la carga de BeanDefinition

El proceso de carga representa el Bean definido por el usuario como una estructura de datos dentro del contenedor de IoC, y la estructura de datos dentro de este contenedor es BeanDefinition. La definición detallada de esta estructura de datos se puede ver a continuación. En general, esta BeanDefinition es en realidad una abstracción del objeto POJO en el contenedor IoC. Esta BeanDefinition define una serie de datos para permitir que el contenedor IoC administre convenientemente el objeto POJO, que es Spring Bean. Es decir, BeanDefinition es el objeto de dominio de Spring. A continuación, realizaremos un análisis detallado de este proceso de carga, para que todos puedan tener una comprensión más clara de todo el proceso.

El tercer proceso es el proceso de registrar estas BeanDefinitions con el contenedor de IoC.

Este proceso se completa llamando a la implementación de la interfaz BeanDefinitionRegistry Este proceso de registro registra el BeanDefinition analizado durante el proceso de carga con el contenedor IoC. Se puede ver que BeanDefinition se inyecta en un HashMap dentro del contenedor de IoC, y el contenedor Ioc contiene estos datos de BeanDefinition a través de este HashMap.

Todo el proceso puede entenderse como el proceso de inicialización del contenedor.

La inicialización del contenedor se logra mediante refresh () de AbstractApplicationContext.

imagen




Supongo que te gusta

Origin blog.51cto.com/15082402/2644345
Recomendado
Clasificación