configuración basada en XML AOP

En primer lugar, el AOP de configuración basado en XML

       1. Supongamos que crea una necesidad para mejorar AccountService (en la que cada método llevará a cabo un método de adición de registro), y luego crear un registro de la clase que implementa el método de la tala;

público  de clase AccountServiceImpl los implementos IAccountService { 

    público  vacío saveAccount () { 
        System.out.println ( "una salvación" ); 
    } 

    pública  vacío UpdateAccount ( int I) { 
        System.out.println ( "realizar una actualización" + I); 
    } 

    pública  int DeleteAccount () { 
        System.out.println ( "borrar" );
         retorno 0 ; 
    }
público  de clase Logger {
     / ** 
     * Pre-notificación 
     * / 
    público  vacío beforePrintLog () { 
        System.out.println ( "método de pre-notificación clase beforePrintLog Logger comienza el registro ..." ); 
    } 

    / ** 
     * Después Notify se fija 
     * / 
    público  vacío afterReturningPrintLog () { 
        System.out.println ( "método posterior a la notificación de clase afterReturningPrintLog Logger comienza el registro ..." ); 
    } 

    / ** 
     * notificación de anormalidad 
     * / 
    público  vacío afterThrowingPrintLog () { 
        System.out.println ( "método de notificación anormalidad clase afterThrowingPrintLog Logger comienza el registro ..." ); 
    }

    / ** 
     * notificación final 
     * / 

    público  vacío afterPrintLog () { 
        System.out.println ( "notificación método final de clase afterPrintLog Logger comienza el registro ..." ); 
    } 
    / ** 
     * Notificación de sonido envolvente 
     * Pregunta: 
     * Cuando después configuramos todo consejo, no se lleva a cabo el método de punto de entrada, pero la puesta en práctica del método de notificación 
     * análisis: 
     * proxies consejos alrededor dinámicos tienen un punto de entrada de la llamada método claro, y nosotros no 
     * resueltos: 
     * la primavera ofrece una interfaz: ProceedingJoinPoint , proceder a la interfaz () método es equivalente a una llamada explícita al método de punto de entrada 
     * la interfaz se puede utilizar como un parámetro de método en torno consejos, durante la ejecución del programa, Spring Framework proporciona la clase de implementación de interfaz para que podamos utilizar para nuestra 
     ramita * consejo alrededor 
     * el código se puede mejorar cuando el método de control manual ejecutado 
     * / 
    público Object aroundPrintLog (ProceedingJoinPoint PJP) { 
        Object rtValue =nula ;
         el try { 
            Object [] args = pjp.getArgs (); 
            System.out.println ( "clase Método aroundPrintLog registrador inicia el registro delante ..." ); 
            rtValue = pjp.proceed (args); // método del nivel de negocio claro (punto de corte método) llama 
            System.out.println ( "clase aroundPrintLog método Logger ... registro de inicio trasera" );
             retorno rtValue; 
        } la captura (Throwable T) { 
            System.out.println ( "método de la clase Logger aroundPrintLog comienza excepción de registro ..." );
             de banda  nueva nuevo una RuntimeException (T); 
        } finally {
            System.out.println ( "clase Método aroundPrintLog Logger comienza la tala definitiva ..." ); 
        } 
    } 
}
 
 

 

 
 
 

 

 

 

       El primer paso : la introducción de una dependencia:              

< Dependencias > 
        < dependencia > 
            < groupId > org.springframework </ groupId > 
            < artifactId > primavera-contexto </ artifactId > 
            < versión > 5.0.2.RELEASE </ version > 
        </ dependencia > 
        <! - 解析切入点表达式-> 
        < dependencia > 
            < groupId > org.aspectj </ groupId > 
            < artifactId >aspectjweaver </artifactId > 
            < versión > 1.8.7 </ version > 
        </ dependencia > 

    </ dependencias >

       Segundo paso : Perfil

         La configuración del resorte COI, introducida en el objeto de configuración de introducción;

                Configuración específica: https://www.cnblogs.com/cqyp/p/12498972.html

          Configuración de configuración AOP basada en primavera:

 

<! - pasos de configuración XML Spring basado en el AOP 
        1. notificación bean administrado a resorte 
        2. AOP: etiqueta de configuración config indica el comienzo de AOP 
        3. AOP: etiqueta aspecto indica que la sección de configuración 
                id: sección es dar una identificación única 
                ref: notificación clase: el grano de Id 
        4. en AOP: etiqueta interna aspecto etiqueta correspondiente utiliza para configurar el tipo de notificación 
               dejamos que printLog ejemplo se lleva a cabo antes de realizar método pointcut: es un pre-notificación 
               AOP: antes: muestra una disposición previos a la notificación 
                    método: la clase Logger se utiliza para especificar cuál es el método de notificación previa 
                    pointcut: la expresión punto de corte se utiliza para especificar el significado de la expresión es el punto de entrada para el método de capa de negocio mejorada de 
                        escribir la expresión punto de corte: 
                             palabra clave : ejecución (expresión) 
                             expresión: 
                                  modificadores de acceso valor de retorno nombre del paquete nombres de paquetes nombres de los paquetes ... el nombre del nombre de método de clase (lista de parámetros) ...
                             expresión escrita estándar: 
                               lista de argumentos: usando un comodín representa cualquier tipo de parámetros, pero no deben parámetros
                                   com.li.service.impl.AccountServiceImpl.saveAccount () public void 
                             modificadores de acceso pueden ser omitidos 
                                  com.li.service.impl.AccountServiceImpl.saveAccount vacío () 
                              Devuelve el valor puede representar cualquier valor de retorno usando un comodín 
                                  * com.li.service. impl.AccountServiceImpl.saveAccount () 
                              nombre del paquete puede utilizar comodines, representa cualquier paquete, el paquete tiene unos cuantos niveles, tiene que escribir unos cuantos *, también se puede utilizar .. representan el paquete actual y sus sub-paquetes 
                                  * * .. AccountServiceImpl.saveAccount () 
                              nombres de las clases y métodos se pueden utilizar para lograr el comodín * 
                                  * * .. *. * () 
                             pasan todos con la redacción
                               Parámetro que indica si el uso .. Disponible
                             . * * * * .. (..) 
                      las expresiones reales de desarrollo pointcut escritos: 
                           cortar todo método de capa de negocio en la clase de implementación 
                               * * * com.li.service.impl (..) .. 
    -> 
    <! - configuración de clase Logger -> 
    < bean ID = "Logger" clase = "com.li.utils.Logger" > </ bean > 
    <! - configuración AOP apertura -> 
    < AOP: config > 
<! - expresiones punto de entrada de configuración, atributo id identifica de manera única la expresión especificada, la expresión: contenido de la expresión 
      de esta etiqueta escrita en AOP: uso interno aspecto único sello sección actual 
      podría escribir en AOP: afuera aspecto, a continuación, se convierte común a todas las facetas 
  -> 
< AOP: el punto de corte ID = "pt1"La expresión = "Ejecución (.. com.li.service.impl * * * (..))" /> 


        <! - Configuración corte -> 
        < AOP: Aspecto ID = "logAdvice" REF = "Logger" > 
            < ! - asociado con la configuración de tipo de notificación, y el establecimiento del método de notificación y el punto de partida del método -> 
- <! realizado método de notificación pre pointcut 

<aop: antes method = "beforePrintLog " pointcut-ref = "pt1" / > 
-> 
<! - después del consejo 

<AOP: después de regresar-método = "afterReturningPrintLog" el punto de corte-REF = "PT1" /> 
-> 
<! - notificación anormalidad 

<AOP: después de lanzamiento de method = "afterThrowingPrintLog "el punto de corte-REF =" PT1 "/> 
->
<! - Aviso Final

<AOP: después method = "pt1" "afterPrintLog" punto de corte-ref = /> 
-> 
<! - 配置环绕通知-> 
< AOP: alrededor método = "aroundPrintLog" punto de corte-ref = "pt1" > </ AOP: alrededor > 
</ AOP: aspecto >  </ AOP: config >
 

 

            

 

Supongo que te gusta

Origin www.cnblogs.com/cqyp/p/12512854.html
Recomendado
Clasificación