Comment obtenir le paramètre de aop élastique de point d'action dans les procédés associés à une catégorie d'aspect, le nom de procédé, les valeurs de retour, et d'autres anomalies de l'information

aop bonne idée peut nous aider à réaliser le découplage du code, comme nous l'avons mentionné précédemment, le code d'enregistrement et le code de la couche d'affaires complètement séparées, grâce à l'intégration de la classe proxy aop de printemps. Dans la classe d'aspect, nous pouvons à travers le ressort interface fourni un bon accès à l'information pertinente du point d'entrée d'origine.

Tout d'abord, nous procédons à partir du code

code de la couche d'affaires qui 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;

    }
}

Cut StudentServiceLogger de classe

@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());
    }

}

Test de classe 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);

    }
}

Enfin, la sortie du journal

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

Les informations pertinentes sur la méthode point d'entrée, ressort bien encapsulé dans l' org.aspectj.lang.JoinPointinterface, de noter ici est que , dans org.aopalliance.interceptle prochain paquet, a également une interface ainsi nommée, ne vous méprenez pas.
joinPoint.getArgs()Le procédé de découpe des informations de paramètres peut retourner méthode, la valeur de retour est un tableau, pour obtenir le traversal, la joinPoint.getSignature()valeur de retour de la méthode de signature de la méthode, l'information de procédé de signature incluant le nom de l' interface , et analogues.
Si vous devez obtenir dans la méthode de coupe de notification valeur de retour de la méthode ou l' information d'exception, il est nécessaire d'utiliser l'annotation de la propriété correspondant à l'emploi correspondant. @AfterReturning l' ouverture de l'annotation peut être vu que la String returning() default "";propriété, le paramètre ajouter de la valeur de retour, le paramètre est déclarée coupe d'annotation à la valeur de retour, reportez - vous à la méthode ci - dessus de la procédure de notification de code d'opération. De même , vous pouvez utiliser @AfterThrowing annotation String throwing() default "";attributs, vous pouvez accéder à la méthode de coupe des anomalies jette.

Publié 92 articles originaux · louange gagné 13 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/qq_41885819/article/details/104768872
conseillé
Classement