Red de conocimiento informático - Aprendizaje de programación - Cómo utilizar la programación de aspectos para generar registros en Java

Cómo utilizar la programación de aspectos para generar registros en Java

1. Primero cree una clase de Controlador de interceptación de anotaciones personalizada, el código es el siguiente

/**

* Controlador de interceptación de anotaciones personalizado

*/

@Target({ ElementType.PARAMETER, ElementType.METHOD })

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface ControllerLog {

String desc() default "" // Indica que la impresión predeterminada está vacía

}

2. Cree una clase de aspecto de registro de impresión, introduzca la anotación de aspecto @Aspect.

El nuevo código del método es el siguiente:

//Pointcut de la capa del controlador

@Pointcut ("@annotation(org .springframework.web.bind.annotation.RequestMapping)")

public void recordLog() {

}

@Around( "recordLog()")

objeto público alrededor(ProceedingJoinPoint pjp) throws Throwable {

// ExPatternParser.initLogger();

long start = System. currentTimeMillis();

p>

Objeto[] args = pjp.getArgs();

Comentario de cadena = this.getControllerMethodDescription(pjp);

Objeto retVal = null;

prueba {

retVal = pjp.proceed();

} catch (Throwable e) {

// TODO Bloque de captura generado automáticamente

logger.error("Solicitud fallida" e.toString(), e);

remark = remark ".

Causa de excepción por " e.toString();

throw e;

}finally{

long end = System.currentTimeMillis();

long cost = end - start;

//Imprimir registro de acceso

//Los parámetros de todos los métodos en el Controlador, los dos primeros son: Solicitud, Respuesta

if(args != null & args.length gt; 0){

Objeto o = args[0];

if(o instancia de HttpServletRequest) {

Solicitud HttpServletRequest = (HttpServletRequest) args[0];

PrintLog.visit(solicitud, costo, comentario);

}

}

}

return retVal;

}

/**

* Obtención de anotaciones La descripción la información del método se utiliza para las anotaciones de la capa del controlador

* @param punto de corte joinPoint

* @return descripción del método

* @throws Exception

*/

Cadena estática pública getControllerMethodDescription(ProceedingJoinPoint joinPoint)

lanza la excepción {

Cadena targetName = joinPoint.getTarget().getClass(). getName();

Nombre del método de cadena = joinPoint.getSignature().getName();

Objeto[] argumentos = joinPoint.getArgs();

Clase targetClass = Class.forName(targetName);

Método[] métodos = targetClass.getMethods();

Descripción de cadena = "";

for (Método método: métodos) {

if (method.getName().equals(methodName)) {

Clase[] clazzs = método.getParameterTypes();

if (clazzs.length == argumentos.length) {

ControllerLog controladorLog = método.getAnnotation(ControllerLog.class);

if (controllerLog !=null){

descripción =

controllerLog.desc();

}

descanso;

}

}

}

descripción de la devolución;

}

3. Luego agregue anotaciones a cada clase de Controlador:

@ControllerLog(desc = "Registrar contenido que se imprimirá")