Cómo obtener el parámetro AOP resorte pointcut en los métodos de clase aspecto asociados, nombre del método, los valores de retorno, y otra anormalidad información

AOP idea buena puede ayudar a lograr el desacoplamiento de código, como hemos mencionado antes, el código de registro y el código de capa de negocio completamente separado, a través de la integración de la representación de primavera AOP clase. En la clase de aspecto, podemos a través de la primavera siempre buena interfaz de acceso a la información relevante del punto de entrada original.

En primer lugar, se procede a partir del código

código de la capa de negocio que StudentServiceImpl

@Service("studentService")
public class StudentServiceImpl implements StudentService {


    @Override
    public int addStudent(Student student) throws Exception {
            System.out.println("addStudent...业务层代码执行...");
            return 1;
    }

    @Override
    public int deleteStudent(Integer id) throws Exception{

            System.out.println("deleteStudent...业务层代码执行...");
            int i = 1/0;
            return 0;

    }
}

StudentServiceLogger clase corte

@Aspect
@Component
public class StudentServiceLogger {

    @Before("execution(* com.wuwl.service.impl.StudentServiceImpl.*(..) )")
    public void doBefore(JoinPoint joinPoint){
        Object[] args = joinPoint.getArgs();
        String methodName = joinPoint.getSignature().getName();
        System.out.println(methodName+"方法执行前...");
        System.out.println("参数为:"+ Arrays.asList(args));
    }

    @After("execution(* com.wuwl.service.impl.StudentServiceImpl.*(..) )")
    public void doAfter(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        System.out.println(methodName+"方法执行后...");
    }

    @AfterReturning(value = "execution(* com.wuwl.service.impl.StudentServiceImpl.*(..) )" , returning = "returning")
    public void doReturn(JoinPoint joinPoint,Object returning){
        String methodName = joinPoint.getSignature().getName();
        System.out.println(methodName+"方法返回,返回值为:"+returning);

    }

    @AfterThrowing(value = "execution(* com.wuwl.service.impl.StudentServiceImpl.*(..) )",throwing = "ex")
    public void doThrow(JoinPoint joinPoint,Exception ex){
        String methodName = joinPoint.getSignature().getName();
        System.out.println(methodName+"方法异常,异常信息为:"+ex.getMessage());
    }

}

Prueba de clase AopTest

public class AopTest {

    ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

    @Test
    public void test1() throws Exception {
        StudentService studentService = ac.getBean("studentService",StudentService.class);
        studentService.addStudent(new Student());
        System.out.println("==================割===============");
        studentService.deleteStudent(1);

    }
}

Por último, la salida del registro

addStudent方法执行前...
参数为:[com.wuwl.domain.Student@7e5c856f]
addStudent...业务层代码执行...
addStudent方法执行后...
addStudent方法返回,返回值为:1
==================割===============
deleteStudent方法执行前...
参数为:[1]
deleteStudent...业务层代码执行...
deleteStudent方法执行后...
deleteStudent方法异常,异常信息为:/ by zero

Información relevante sobre el punto de entrada método, primavera bien encapsulada en el org.aspectj.lang.JoinPointinterfaz, a tener en cuenta es que, en org.aopalliance.interceptel próximo paquete, también tiene una interfaz llamada así, no se puede confundir.
joinPoint.getArgs()El método de corte de la información de parámetros puede devolver método, el valor de retorno es una matriz, para obtener el recorrido; joinPoint.getSignature()valor de retorno del método de método de firma, la información método de firma incluyendo el nombre de la interfaz y similares.
Si necesita obtener en el método de corte de notificar valor de retorno método o información de excepción, es necesario utilizar la correspondiente anotación de propiedad para el trabajo correspondiente. @AfterReturning la apertura de la anotación puede verse que una String returning() default "";propiedad, el parámetro valor de retorno añadir, a continuación, el parámetro se declara anotación corte para el valor de retorno, se refieren al método anterior de proceso de notificación de código de operación. Del mismo modo se puede utilizar @AfterThrowing anotación String throwing() default "";atributos, se puede obtener con el método anomalías corte lanza.

Publicado 92 artículos originales · elogios ganado 13 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/qq_41885819/article/details/104768872
Recomendado
Clasificación