Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente de Spring 9. refrescoContext() actualiza el contexto de la aplicación

Código fuente de Spring 9. refrescoContext() actualiza el contexto de la aplicación

La preparación del contenedor Spring se analizó en el contexto de aplicación de preparación prepareContext () anterior. Hay ocho pasos en total:

Al prepararse para la actualización, realice dos pasos:

Borre el archivo. caché en CachingMetadataReaderFactory

Establezca el inicio del evento de actualización, establezca cerrado en falso, activo en verdadero, marque el contenedor como activo

AbstractApplicationContext define el método de plantilla, refrescoBeanFactory y getBeanFactory llaman al método implementado en GenericApplicationContext

Actualice este campo.refreshed a verdadero, lo que indica que se ha actualizado, luego beanFactory establece el ID de serialización y finalmente devuelve beanFactory

beanFactory es el tipo DefaultListableBeanFactory en Variables miembro de GenericApplicationContext, establezca beanFactory, una implementación ***

Realice el procesamiento posterior en varios beanFactory, el applicationContext actual es una instancia de AnnotationConfigServletWebServerApplicationContext, postProcessBeanFactory realiza tres pasos

realiza dos operaciones, primero agregue un procesador WebApplicationContextServletContextAwareProcessor Aware Bean, la subclase Bean de ServletContextAware se inyectará en los objetos servletContext y servletConfig durante el proceso de creación de instancias, y luego beanFactory registra los dos alcances de solicitud y sesión, y registra varias dependencias Autowired

Registre los dos alcances de solicitud y sesión, y luego registre ServletRequest, ServletResponse, HttpSession, WebResponse, HttpSession, WebResponse, HttpSession, WebResponse, HttpSession, WebResponse, HttpSession, WebResponse, etc. HttpSession, WebRequest

BeanFactoryPostProcessor es una interfaz que procesa todos los beans en beanFactory. Después de cargar todas las beanDefinitions, BeanFactoryPostProcessor puede cargar beanDefinitions.

Puede modificar las propiedades de beanDefinition y luego crear una instancia del bean.

BeanDefinitionRegistryPostProcessor es una subinterfaz de BeanFactoryPostProcessor. Después de definir el método postProcessBeanDefinitionRegistry, la definición del Bean se obtendrá antes de ejecutar y registrar el método postProcessBeanFactory. en el contenedor Spring

p>

Si beanFactory es una subclase de BeanDefinitionRegistry, los postprocesadores de tipo BeanDefinitionRegistryPostProcessor se procesan en orden de prioridad, y otros tipos de postprocesadores pasados ​​se procesan en último lugar, de la siguiente manera:

Si beanFactory no es una subclase de la subclase BeanDefinitionRegistry, recorra directamente los beanFactoryPostProcessors entrantes y llame al método postProcessBeanFactory del elemento

Finalmente, procese el beanFactory registrado en otros tipos de BeanFactoryPostProcessor, obtenga el nombre del bean, guárdelo en la lista postProcessorNames y luego procéselo de la siguiente manera:

ConfigurationClassPostProcessor procesa la anotación @Configuration y escanea BeanDefinition en el proyecto. ConfigurationClassPostProcessor en detalle

BeanPostProcessor es una interfaz y es el postprocesador de Bean que ejecuta el método postProcessBeforeInitialization antes de crear una instancia del Bean y ejecuta el método postProcessAfterInitialization después de crear una instancia del Bean para mejorar la instancia del Bean.

beanFactory obtiene el nombre del bean del tipo BeanPostProcessor y lo mantiene en la matriz postProcessorNames, la lista BeanPostProcessor se divide en cuatro categorías:

beanFactory primero agrega un BeanPostProcessor de tipo BeanPostProcessorChecker, luego ordena entre los distintos PostProcessor enumera, los agrega a la lista beanPostProcessor de beanFactory y finalmente agrega un ApplicationListenerDetector

Primero determine si el contenedor beanFactory contiene la definición de bean messageSource. Si existe, obtenga el Bean directamente. registre manualmente un bean singleton de messageSource y luego asígnelo.

messageSource

Primero determine si hay una definición de Bean applicationEventMulticaster en el contenedor beanFactory. Si existe, obtenga la instancia de Bean. Si no existe, cree una instancia de SimpleApplicationEventMulticaster, registre manualmente un Bean singleton y luego asígnelo. a esto. applicationEventMulticaster

Primero determine si hay una definición de bean applicationEventMulticaster en el contenedor beanFactory. applicationEventMulticaster

AbstractApplicationContext no implementa este método, que se utiliza para notificar a la subclase que actualice el contenedor

Llame al método GenericWebApplicationContext#onRefresh de la clase principal y luego cree el servidor web. p>

Cree un servidor web y luego llame al método GenericWebApplicationContext#initPropertySources de la clase principal para mantener el tema de inicialización servletContext

en la propiedad servletContextInitParams del entorno. applicationEventMulticaster.defaultRetriever.applicationListeners y luego agregue el oyente inyectado a this.applicationEventMulticaster.defaultRetriever.applicationListener.applicationListeners. Luego mantenga el Bean de escucha inyectado en this.applicationEventMulticaster.defaultRetriever.applicationListenerBeans y finalmente maneje earlyEvent

BeanFactory.