..
Ahora vamos a ver cómo crear un aspecto.
En primer lugar, creamos una interfaz en la que el ejemplo vamos a escribir nuestros puntos de corte:
pública MyInterface interfaz {
public void f1 ();
public int f2 ();
public int f3 () throws Exception;
f4 public void () throws Exception;
f5 public int ();
}
Para escribir un punto de corte debe conocer los designadores de AspectJ punto de corte , en nuestro ejemplo vamos a utilizar sólo la ejecución que coincide con el punto de unirse a los métodos de ejecución.
ejecución (modificadores de patrón? Declarar ret-tipo-modelo-tipo de patrón? nombre de patrón (param-patrón) lanza-patrón?)donde:
En primer lugar tenemos que crear nuestro propio aspecto:
@ Aspecto
{Public MyAspect clase
.............
}
Como vemos, la clase está anotado con @ aspecto.
Esto no es suficiente porque hay que activar el soporte de AOP nell'applicationContext Xml.:
<-! ENBLING AspectJ -> <aop:aspectj-autoproxy /> <-! MYASPECT -> <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />
Una vez realizadas estas dos operaciones están dispuestos a crear un consejo, por ejemplo, una acción realizada antes de la ejecución de la f1 método (antes consejo):
@ Antes ("ejecución (* it.mrwebmaster.aop.MyInterface.f1 (..))")
beforeF1 public void () {
System.out.println ("Antes de F1");
}
Como puede verse en el código que utiliza la anotación @ Antes de que acepta una expresión como un valor que identifica un punto de corte.
En nuestro ejemplo, la expresión coincide con todos los métodos que se denominan interfaz it.mrwebmaster.aop.MyInterface f1 indipendetemente por sus modificadores, tipo de retorno y parámetros de entrada.
Del mismo modo se puede utilizar un consejo que se ejecuta cuando un método termina su ejecución (después de volver asesoramiento) el uso correcto de la anotación @ AfterReturning:
@ AfterReturning punto de corte (= "La ejecución (* it.mrwebmaster.aop.MyInterface.f2 (..))", volver =" retval ")
afterReturningF2 public void (Object retval) {
System.out.println ("retorno F2" + retval);
}
Este registro tiene los siguientes parámetros, además de los puntos de corte, el nombre dado al objeto devuelto por el método que se puede dar como parámetro de entrada de Advaita.
En este caso la expresión del punto de corte es inviarata excepto por el nombre del método, que en este caso, f2.
@ AfterThrowing punto de corte (= "La ejecución (* it.mrwebmaster.aop.MyInterface.f3 (..))", tirar =" arrojadiza ")
public void afterThrowingF3 (Throwable arrojadizas) {
System.out.println ("F3 lanza" + arrojadizas);
}
La diferencia es que el método no devuelve un objeto sino una excepción.
Otro tipo de consejos se ejecuta siempre después de un método, es el momento con normalidad o se produce una excepción (previa consulta). Este consejo se aplica mediante el uso de @ Después:
Después de @ ("ejecución (* it.mrwebmaster.aop.MyInterface.f4 (..))")
afterF4 public void () {
System.out.println ("después de F4");
}
Finalmente podemos ver cómo hacer que el "todo consejo:
@ Around ("ejecución (* it.mrwebmaster.aop.MyInterface.f5 (..))")
public void aroundF5 (ProceedingJoinPoint PJP) {
System.out.println ("Antes de F5");
try {
Objeto retval = pjp.proceed ();
System.out.println ("F5 VOLVER" + retval);
} Catch (Throwable e) {
System.out.println ("F5 lanza" + e);
}
}
Como podemos ver en el código de la expresión de punto de corte no es diferente de otros consejos.
Lo que cambia es el mismo consejo que debe invocar explícitamente a la ejecución del método a través del método de la clase ProceedingJoinPoint proceder, cuya aplicación se pasa como entrada.
Esta interfaz proporciona también utiliza otros métodos de proceder para recuperar información sobre los parámetros del método, el tipo de cambio y el objeto sobre el método que se ejecuta.
Se deja al lector más profundo.
Para poner a prueba nuestros consejos que podemos hacer es escribir una implementación trivial de la MyInterface interfaz, y crear una prueba principal:
MyInterfaceImpl {public class MyInterface
@ Override
public void f1 () {
System.out.println ("F1");
}
@ Override
public int f2 () {
System.out.println ("F2");
return 0;
}
@ Override
public int f3 () throws Exception {
System.out.println ("F3");
throw new Exception ("Excepción F3");
}
@ Override
f4 public void () throws Exception {
System.out.println ("F4");
}
@ Override
f5 public int () {
System.out.println ("F5");
return 0;
}
}
. nell'applicationContext xml:
<- Objetivo: Object -> <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />La prueba principal:
público principal la clase {
public static void main (String [] args) {
/ **
* Instanz el COI contenedor
* /
ApplicationContext ApplicationContext ClassPathXmlApplicationContext = new ("applicationContext.xml");
MyInterface MyInterface = (MyInterface) applicationContext.getBean ("myInterfaceImpl");
myInterface.f1 ();
System.out.println ("########## \ n ");
myInterface.f2 ();
System.out.println ("########## \ n ");
try {
myInterface.f3 ();
} Catch (Exception e) {}
System.out.println ("########## \ n ");
try {
myInterface.f4 ();
} Catch (Exception e) {}
System.out.println ("########## \ n ");
myInterface.f5 ();
System.out.println ("########## \ n ");
}
}
| |
Linux (Curso)
Guía completa de código abierto del sistema. A partir de 49 €. |
| |
PHP (Curso)
Ciclo completo para la creación de sitios Web dinámicos. A partir de 49 €. |
| |
Ruby y Ruby on Rails (Curso)
Crear aplicaciones de software y la Web con Ruby y RoR. A partir de 39 €. |