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
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
Implementación del contenedor AnnotationConfigApplicationContext, puntos de registro para los tres componentes anteriores
Activar la fase de intervención BeanDefinition
Flujo de procesamiento específico
Implementación del código fuente correspondiente
Etapa previa de instanciación de frijoles
PostProcessorRegistrationDelegate.registerBeanPostProcessors () crea una instancia del componente BeanPostProcessor por adelantado para su uso posterior al crear una instancia de otros beans
Bean instanciación post-etapa br /> AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation () maneja @Bean, factoryMethod y otros puntos enterrados de instanciación externa
AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors () recopila información como propiedades de dependencia e inyección de métodos de objetos bean
AbstractAutowireCapableBeanFactory.populateBean () asignación de inyección de dependencia de objeto bean
AbstractAutowireCapableBeanFactory.initializeBean () genera procesamiento relacionado con el proxy dinámico Aop para objetos bean
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
BeanFactoryPostProcesser extensión
InitializingBean, extensión de instanciación de Bean
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!