El uso del postprocesador Spring AOP

¡Acostúmbrate a escribir juntos! Este es el día 15 de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .

Las escasas sombras son horizontales y el agua es clara y poco profunda, y la fragancia oscura flota al anochecer.

1. Introducción

En el sistema Spring, la comprensión del contenedor IOC y Bean se describió en el artículo anterior, y el código fuente compartido de AOP continuará en este artículo. AOP es un punto de conocimiento muy complicado, así que comencemos con el posprocesador.

2 postprocesador BeanPostProcesser

BeanPostProcesserEs un concepto muy importante en Spring, que es una interfaz extensible proporcionada por el contenedor.Las anotaciones dadas por Spring sobre el posprocesador son las siguientes: En Anotación BeanPostProcesserresumen, es similar a un gancho de fábrica que permite a los usuarios personalizar y modificar beans Para obtener información de ejemplo, verifique la interfaz marcada o envuelva el bean como un proxy. Las interfaces de marcador generalmente se procesan antes de la inicialización y, en el caso de los proxies, después de la inicialización. Principalmente dividido en dos consideraciones: una es el registro, que ApplicationContextpuede detectar automáticamente el Bean de posprocesador y aplicarlo antes y después de la instancia de Bean creada posteriormente. Uno es el orden. Las interfaces del posprocesador se procesarán en un cierto orden. El orden de prioridad de mayor a menor es PriorityOrdered, Ordered y non-sorted interfaces.

Casos de usoAquí se puede ver que aunque BeanPostProcesseres una interfaz, también puede tener cuerpos de métodos, lo cual es una característica de java8. Incluye principalmente los siguientes dos métodos:

# 传入的参数是 bean 本身和 beanName 名称
# bean 初始化方法调用前被调用
postProcessBeforeInitialization(Object bean, String beanName)
# bean 初始化方法调用后被执行
postProcessAfterInitialization(Object bean, String beanName)
复制代码

Aquí, necesitamos hablar Instantiationsobre Initializationla diferencia entre instanciación e inicialización.La instanciación es el proceso de creación de un bean.Este proceso generalmente llama al constructor, y la inicialización es la asignación de atributos al bean. Permítanme presentarlo primero. También InstantiationAwareBeanPostProcessorse hereda de BeanPostProcesser, pero para lograr más funciones, debe ejecutarse antes y después de la creación de instancias.

InstantiationAwareBeanPostProcessor 接口中定义的方法
# 实例化之前的处理
postProcessBeforeInstantiation
# 实例化之后处理
postProcessAfterInstantiation
# 对属性值进行修改,如果 postProcessAfterInstantiation方法返回false,该方法可能不会被调用。可以在该方法内对属性值进行修改
postProcessProperties
# 该方法已经废弃,其作用和 postProcessProperties 类似
postProcessPropertyValues
复制代码

InstanciaciónAwareBeanPostProcessorTodavía es necesario sacar esta imagen relativamente clásica para ilustrar el problema. El proceso general se muestra en la figura.Declare aquí la AppInstantiationAwareConfiginterfaz de implementación del Bean InstantiationAwareBeanPostProcessor. Puede ver que la función de aspecto se puede implementar antes y después de la creación de instancias y la inicialización del Bean durante el proceso de inicio del proyecto.

3 Resumen

En este artículo, describo el front-end de AOP, el uso de posprocesadores y la función de la API. Es muy útil para comprender el AOP posterior. En artículos posteriores, continuaré compartiendo la mejora principal de AOP. y su proxy.contenido.

Supongo que te gusta

Origin juejin.im/post/7086758514290491400
Recomendado
Clasificación