Diferencia entre revisiones de «Interceptores Con Spring»

De Dos Ideas.
Saltar a: navegación, buscar
(Ejmplo de creación de un interceptor)
 
(No se muestra una edición intermedia del mismo usuario)
Línea 1: Línea 1:
 
[[Category:Spring Framework]]
 
[[Category:Spring Framework]]
 +
[[Categoría: AOP]]
 
En [[Spring Framework]] podemos usar tags particulares de aop para interceptar objetos y declarar transacciones de manera mucho más simple.
 
En [[Spring Framework]] podemos usar tags particulares de aop para interceptar objetos y declarar transacciones de manera mucho más simple.
  
 
Usando el mismo mecanismo, podemos interceptar objetos y agregarles cualquier tipo de comportamiento (más allá de transaccional).
 
Usando el mismo mecanismo, podemos interceptar objetos y agregarles cualquier tipo de comportamiento (más allá de transaccional).
  
== Ejmplo de creación de un interceptor ==
+
== Ejemplo de creación de un interceptor ==
 
Existen distintos tipos de interceptores, que interceptan distintos aspectos (excepciones, antes de un método, después de un método, etc.).
 
Existen distintos tipos de interceptores, que interceptan distintos aspectos (excepciones, antes de un método, después de un método, etc.).
  
Línea 61: Línea 62:
  
 
La expresión del pointcut permite, como vemos, no sólo referenciar a clases, sino también a métodos particulares. Así, podremos interceptar ciertos métodos, ignorando otros.
 
La expresión del pointcut permite, como vemos, no sólo referenciar a clases, sino también a métodos particulares. Así, podremos interceptar ciertos métodos, ignorando otros.
 
  
 
==Ver también==
 
==Ver también==
 
* [[Transacciones Con Spring]]
 
* [[Transacciones Con Spring]]
 
* [http://static.springframework.org/spring/docs/2.0.x/reference/aop.html Manual de Spring: Capítulo 6]
 
* [http://static.springframework.org/spring/docs/2.0.x/reference/aop.html Manual de Spring: Capítulo 6]

Revisión actual del 18:27 30 mar 2010

En Spring Framework podemos usar tags particulares de aop para interceptar objetos y declarar transacciones de manera mucho más simple.

Usando el mismo mecanismo, podemos interceptar objetos y agregarles cualquier tipo de comportamiento (más allá de transaccional).

Ejemplo de creación de un interceptor

Existen distintos tipos de interceptores, que interceptan distintos aspectos (excepciones, antes de un método, después de un método, etc.).

Crear un interceptor de método es tan simple como hacer una clase que herede de org.aopalliance.intercept.MethodInterceptor

MethodInterceptor es el interceptor más amplio que existe, y muy facil de implementar.

Una clase interceptor de log de ejemplo

package com.dosideas.interceptor;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class LogInterceptor implements MethodInterceptor {
    public Object invoke(MethodInvocation invocation) throws Throwable {
        System.out.println("Iniciando llamada");
        Object rval = invocation.proceed();
        System.out.println("Finalizando llamada");
        return rval;
    }
}

Configuración del interceptor

Para agregar este interceptor a todo un grupo de clases podriamos configurar:

<aop:config>
    <aop:pointcut id="businessOperation"expression="execution(* com.dosideas.business.*.*(..))"/>
    <aop:advisor advice-ref="interceptor.LogInterceptor" pointcut-ref="businessOperation"/>
</aop:config>


<bean id="interceptor.LogInterceptor" class="com.dosideas.interceptor.LogInterceptor"/>
<bean id="business.PaisBo" class="com.dosideas.business.impl.PaisBoImpl"/>

Como vemos, declaramos un Pointcut que referencia a todas las clases y métodos del paquete business. Luego, declaramos un Advice, indicando que ese pointcut debe ser interceptado por LogInterceptor.

Y listo! Todos los objetos que declaremos y pertenezcan al paquete referenciado por el pointcut tendrán este interceptor.

Mejor aún, encadenar interceptores es tan simple como agregar advisor. Por ejemplo:

<aop:config>
    <aop:pointcut id="businessOperation"expression="execution(* com.dosideas.demo.business.*.*(..))"/>
    <aop:advisor advice-ref="interceptor.!LogInterceptor" pointcut-ref="businessOperation"/>
    <aop:advisor advice-ref="interceptor.!FooInterceptor" pointcut-ref="businessOperation"/>
    <aop:advisor advice-ref="interceptor.!BarIntercetpor" pointcut-ref="businessOperation"/>
</aop:config>

En este ejemplo, las clases serán interceptadas por LogInterceptor, luego FooInterceptor y finalmente BarInterceptor (y luego finalmente se ejecutará la clase real).

De la misma manera, se podría agregar un interceptor de transacciones (como vimos en la nota anterior) y otros interceptores.

La expresión del pointcut permite, como vemos, no sólo referenciar a clases, sino también a métodos particulares. Así, podremos interceptar ciertos métodos, ignorando otros.

Ver también