¿Cuáles son las formas de configurar aop en primavera?
Existen aproximadamente cuatro métodos de configuración para implementar AOP en Spring dependiendo de la versión. Enumerémoslos brevemente ahora. Antes de presentar el método de configuración AOP de Spring, primero debemos prestar atención al concepto de Advisor en Spring. En Spring, Advisor es una combinación de Advice y Pointcut, pero aún no es un Aspecto en el concepto de AOP. Porque en Spring, Advisor sigue siendo un prototipo utilizado por Spring para generar objetos de Aspecto. Dependiendo de la configuración, Spring puede generar Aspectos solo para una determinada clase o para todas las clases.
1. Método de configuración del agente basado en el archivo de configuración xml
Este método rara vez se usa después de 2.0 porque hay demasiados elementos de configuración y es demasiado engorroso. Pero sigue siendo muy útil para comprender Spring AOP
1.1 Definir consejos
lt bean id="advice" class="yourAdviceImpl" /gt;
1.2 Definir puntos de corte
Para definir un punto de corte, puede elegir un punto de corte declarado usando expresiones regulares o un punto de corte declarado usando AspectJ. Para puntos de expresión regulares, use Perl5RegexpMethodPointcut o JdkRegexpMethodPointcut (Java
1.4 o superior, no se requiere soporte para Jakarta ORO para puntos de corte AspectJ, use AspectJExpressPointcut
lt; pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"gt;
lt;property name="pattern" value="yourRegularExpression" /gt;
lt;/ beangt;
lt;bean id="pointcut" class="org.springframework.aop.aspectj.AspectJExpressionPointcut"gt;
lt;property name="expresión" valor=" yourAspectJExpression" /gt;
lt;/beangt;
1.3 Definir el notificador
DefaultPointcutAdvisor es el notificador predeterminado proporcionado por Spring, que debe proporcionarse Referencias a consejos y puntos de referencia.
Spring también proporciona RegexpMethodPointcutAdvisor y AspectJExpressionPointcutAdvisor para corresponder a dos formas de declarar puntos de corte, sin tener que definir los puntos de corte por separado.
lt; bean id="advisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"gt
lt nombre de propiedad="advice" ref="advice"; /gt;
lt;nombre de propiedad="pointcut" ref="pointcut" /gt;
lt;/beangt;
lt;bean id= "advisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"gt;
lt;property name="advice" ref="advice" /gt;
lt; nombre de propiedad="patrón" valor="tuExpresiónRegular" /gt;
lt; /beangt
lt; bean id="advisor" class="org.springframework.aop. aspectoj.AspectJExpressionPointcut"gt;
lt; nombre de propiedad="advice" ref="advice" /gt;
lt; nombre de propiedad="expresión" valor="yourAspectjExpression" / gt;
lt;/beangt;
1.4 Definir ProxyFactoryBean
lt; bean id="yourBean" class="org.springframework.aop.framework. ProxyFactoryBeangt;
lt;property name="target" ref="yourTargetBean" /gt;
lt;property name="interceptorNames" value="advisor" /gt; p>
p>
lt;property name="proxyInterfaces" value="interfaceClass" /gt;
lt;/beangt;
los nombres de interceptor y las interfaces de proxy son ambos propiedades de matriz, por lo que puede declarar una lista para usar y también puede permitir que Spring convierta automáticamente un valor único en una matriz
Lo anterior define claramente el targetBean para aplicar el proxy para generar una instancia de aspecto.
Si no desea limitar el targetBean, puede dejar que Spring genere instancias de aspecto para todos los beans que coincidan con la declaración de punto de corte. De esta manera no es necesario definir ProxyFactoryBean uno por uno. Solo necesita definir
.lt; bean class="org.springframework.aop .framework.autoproxy.DefaultAdvisorAutoProxyCreator" /gt;
Este es un BeanPostProcessor, por lo que Spring lo identificará y utilizará automáticamente en el ciclo de declaración del bean
2 Utilice la etiqueta aop después de usar 2.0
p>lt; aop: configgt;
lt; >
lt; aop: pointcut id="rendimiento" expresión="ejecución (* *.perform(..))" /gt
lt; ref="rendimiento" /gt;
lt; aop :antes del método="" pointcut="ejecución(* *.perform(..))"
lt; ; aop: método de devolución posterior="" pointcut="ejecución(* *. perform(..))" /gt;
lt; método de devolución posterior="" pointcut="ejecución (* *.perform(..))" /gt;
lt;/aop: aspectogt;
lt;/aop:configgt;
3 Usando anotación
3.1 Usando @Aspect para declarar una clase POJO para un segmento.
3.2 Definir pointcut
@Pointcut("execution(* *.perform(..))")
rendimiento public void(){}< / p>
El nombre del punto de corte definido por @Pointcut es el nombre del método que anota, por lo que el nombre del punto de corte en el ejemplo es
rendimiento(). El método performance() declarado aquí es en realidad solo un marcador que proporciona puntos adicionales para @Pointcut y no requiere ningún significado real.
3.3 Definir notificaciones
Para que el método ejecute el aspecto, pase @Before("rendimiento()"), @AfterReturning
("rendimiento()" " ) para definir notificaciones.
Tenga en cuenta que el nombre del punto de corte proporcionado aquí es performance(), no performance
Si no comprende muy bien los dos puntos anteriores, también puede omitir @Pointcut y definir la expresión AspectJ directamente en @Before, etc. En la notificación, combine los dos pasos anteriores en uno, como @Before("execution(* *.perform(..))")
3.4 Notificar a Spring para crear un proxy
.lt ;aop: aspectoj-autoproxygt;
Esto en realidad es equivalente a declarar un AnnotationAwareAspectJAutoProxyCreator para representar automáticamente instancias de bean coincidentes según el punto de corte declarado por @Pointcut
4 en Spring Integrado en AspectJ
Este método se puede utilizar para aplicaciones más allá del alcance del soporte de Spring AOP. Solo necesita habilitar Spring para obtener la instancia de la clase AspectJ al configurar la instancia de la clase AspectJ en Spring, como
lt bean class="a_aspectj_class" factory-method="aspectOf"gt;
lt; p>
lt;preperty..../gt;
lt;/beangt;