Red de conocimiento informático - Problemas con los teléfonos móviles - SpringBoot: análisis de inicio del contenedor de servlets

SpringBoot: análisis de inicio del contenedor de servlets

SpringBoot1.x solo distingue entre entorno web y entorno no web, y en la versión 2.x se introduce el entorno reactivo, es decir, el entorno responsivo. Por lo tanto, SpringBoot ahora admite tres entornos:

entorno web servlet, entorno web reactivo y entorno no web. El 90% de las empresas utilizan el entorno web Servlet y el entorno predeterminado es utilizar el contenedor Tomcat. Este capítulo presenta principalmente el contenedor Servlet. Este capítulo se centra en el proceso de inicio del contenedor Servlet.

Tomcat es un contenedor de servlets desarrollado por Apache. Implementa soporte para Servlets y JSP y proporciona muchas funciones específicas del servidor web, como la plataforma de control y administración de Tomcat, la administración de dominios de seguridad y la válvula Tomcat.

Dado que Tomcat tiene un servidor HTTP incorporado, también puede considerarse como un servidor web independiente. Sin embargo, Tomcat no debe confundirse con el servidor HTTP Apache, que es un servidor web HTTP implementado en C; los dos servidores web HTTP no están agrupados;

Tomcat incluye una herramienta de gestión de configuración, que también se puede configurar editando archivos de configuración en formato XML.

En SpringApplication.run (Application.class, args), se construye un objeto SpringApplication en su constructor.

En el método de ejecución de SpringApplication, contexto = createApplicationContext() representa La creación de el contexto de la aplicación, cuya clase se construye en función del atributo webApplicationType

El inicio del contenedor de servlets se lleva a cabo en el método refrescoContext (contexto), que eventualmente llamará al método refresco() en la clase AbstractApplicationContext Este método llamará al método onRefresh()

El método onRefresh() se implementa mediante subclases y llama a diferentes métodos según los diferentes contextos de la aplicación. Esto es para el entorno del contenedor Servlet. método class.onRefresh()

Luego verifique el método initPropertySources()

Esto completa la creación del servidor web, es decir, la creación del servidor Tomcat

En el método de actualización () en AbstractApplicationContext) en el método FinishRefresh (), que se llama de acuerdo con el entorno del contenedor web. Ingresará la clase ServletWebServerApplicationContext en el método FinishRefresh ().

De forma predeterminada, solo. Se devuelve un TomcatServletWebServerFactory, por lo que este bean define cuándo cargarlo en el contenedor

Se importa al contenedor mediante la anotación @Import a través del método de análisis en la clase ConfigurationClassParser

deferredImports. forEach(handler::register) se creará en el siguiente paso Grupo.

ProcessGroupImports()

El método getAutoConfigurationEntry de la clase AutoConfigurationImportSelector aquí

Filtre a través del método de filtro y, después de filtrar, solo se encuentran 22

Después de filtrar, encontrará En este momento, hay 29 colecciones de configuración List , una de las cuales es el método org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactory. ServletWebServerFactoryAutoConfiguration

Aquí se analiza el método grouping.getImports, que devuelve las 29 clases de configuración automática cargadas previamente

El método onRefresh crea el servidor web. Aquí

Una vez completada la inicialización del Bean, recorrerá todas las implementaciones de BeanPostProcessor en BeanFactory y llamará al método postProcessBeforeInitialization de la interfaz BeanPostProcessor. Este paso también se experimentará al crear una clase de fábrica para la Web. servicio. Este paso también se realiza al crear una clase de fábrica para un servicio web. El punto de llamada del método se encuentra en el método applyBeanPostProcessorsBeforeInitialization() en la clase AbstractAutowireCapableBeanFactory.

Puedes ver que varias implementaciones del método postProcessBeforeInitialization incluyen. un WebServerFactoryCustomizerBeanPostProcessor. Una de las múltiples implementaciones de

Haga clic en el método postProcessBeforeInitialization en la clase WebServerFactoryCustomizerBeanPostProcessor

Echemos un vistazo al segundo personalizador en la imagen a continuación. ¿Cómo se inyecta ServletWebServerFactoryCustomizer?

Para referencia:

blogs.com/hggen/p/6264475.html

blogs.com/jingmoxukong/p/8258837.html

El segundo personalizador en la imagen de abajo.