Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Prefacio

En la fase de carga del contenedor de muelles, existen algunos diseños muy importantes similares a los puntos enterrados (este concepto no se denomina de manera uniforme, y algunos se denominan "posprocesadores"). Por el momento, este artículo utiliza el significado literal de la interfaz como Postprocesador. El diseño de estos posprocesadores amplía la funcionalidad del contenedor de resorte. Permite personalizar diferentes tipos de posprocesadores, realizando una intervención externa en los nodos de procesamiento y tiempos de carga de beans y definiciones de beans, para satisfacer las necesidades individuales del proyecto.

Post procesador en primavera

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring
Los tres componentes más importantes son: ConfigurationClassPostProcessor, AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, etc.
Primero echemos un vistazo a los puntos enterrados de los componentes anteriores en el código fuente de Spring (diseño del nodo de procesamiento)
Etapa de registro de BeanDefinition
ClassPathXmlApplicationContext implementación del contenedor, puntos de registro para los tres componentes anteriores
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring
Implementación del contenedor AnnotationConfigApplicationContext, puntos de registro para los tres componentes anteriores
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring
Activar la fase de intervención BeanDefinition
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Flujo de procesamiento específico
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Implementación del código fuente correspondiente
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Etapa previa de instanciación de frijoles
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

PostProcessorRegistrationDelegate.registerBeanPostProcessors () crea una instancia del componente BeanPostProcessor por adelantado para su uso posterior al crear una instancia de otros beans
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Bean instanciación post-etapa br /> AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation () maneja @Bean, factoryMethod y otros puntos enterrados de instanciación externa
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring
AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors () recopila información como propiedades de dependencia e inyección de métodos de objetos bean
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring
AbstractAutowireCapableBeanFactory.populateBean () asignación de inyección de dependencia de objeto bean
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring
AbstractAutowireCapableBeanFactory.initializeBean () genera procesamiento relacionado con el proxy dinámico Aop para objetos bean
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Aplicación de postprocesador

Los tres posprocesadores no se usan mucho en proyectos reales, pero algunos proyectos usarán los siguientes escenarios: 1. Después de que se registre la definición de bean, la definición de bean en el contenedor debe mejorarse o intervenir en tiempo de ejecución; 2. En el proceso de creación de instancias de bean, una determinada clase no quiere ser instanciada en Spring; 3. Espero que después de que se inicie el contenedor, se realice alguna lógica de negocios global; 4. El desarrollo de plugins de Spring debe integrarse o acoplarse con Spring. A continuación se muestran algunos ejemplos de escenarios personalizados de postprocesador:
BeanDefinitionRegistryPostProcessor extensión
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring
BeanFactoryPostProcesser extensión
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring
InitializingBean, extensión de instanciación de Bean
Análisis de código fuente de Spring-diseño de punto integrado de postprocesador de Spring

Observaciones finales

El código fuente del postprocesador de primavera se comparte temporalmente aquí. Para más escenarios de uso de postprocesador, aquellos que estén interesados ​​pueden tomarse el tiempo para estudiar el código fuente del proceso de carga del contenedor de primavera. Este tipo de cosas, el escenario de uso no es tan común como la anotación, pero también tiene su uso (especialmente para el diseño o la arquitectura). Puede elegir según su proyecto y función laboral. Eso es todo por hoy, para más productos secos de código fuente de primavera, ¡continúe prestando atención!

Supongo que te gusta

Origin blog.51cto.com/14815984/2532795
Recomendado
Clasificación