spring通知类型有哪些

worktile 其他 4

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring框架中的通知类型有以下几种:

    1. 前置通知(Before Advice):在目标方法执行之前执行的通知。可以用来进行一些准备工作,例如参数校验、权限检查等。

    2. 后置通知(After Advice):在目标方法执行之后执行的通知。无论目标方法是否抛出异常,后置通知都会执行。可以用来进行一些资源释放、日志记录等操作。

    3. 返回通知(After Returning Advice):在目标方法执行成功并返回结果后执行的通知。可以对方法的返回结果进行处理或统计。

    4. 异常通知(After Throwing Advice):在目标方法抛出异常时执行的通知。可以捕获异常并进行处理,比如记录异常日志、发送通知等。

    5. 环绕通知(Around Advice):包围目标方法的通知,在目标方法的前后分别执行。可以在目标方法执行前后做一些自定义的操作,还可以决定是否执行目标方法。

    以上是Spring框架中常用的通知类型,通过在应用程序中配置不同类型的通知组合,可以实现对目标方法的增强和控制。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring框架中的通知类型包括以下几种:

    1. 前置通知(Before advice):在方法调用之前执行的通知。可以在方法执行之前做一些预处理操作,比如参数校验或者日志记录等。

    2. 后置通知(After returning advice):在方法执行之后执行的通知。可以在方法返回结果后对结果进行处理,比如日志记录或者资源释放等。

    3. 异常通知(After throwing advice):在方法抛出异常时执行的通知。可以用于处理方法执行过程中出现的异常情况,比如发送异常报告或者进行错误处理。

    4. 最终通知(After advice):无论方法是否正常返回,都会执行的通知。通常用于释放资源或者清理操作。

    5. 环绕通知(Around advice):包围方法调用的通知,可以在方法调用前后进行操作。环绕通知可以完全控制方法的执行过程,可以在方法前后自定义执行的逻辑。

    这些通知类型可以通过Spring框架的AOP(面向切面编程)功能来进行配置和使用。通过AOP,我们可以将这些通知织入到特定的方法或者类上,实现对方法的增强和控制。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在Spring框架中,通知(Advice)是一种切面编程(AOP)的机制,它可以在目标方法的前后或异常发生时执行特定的逻辑。Spring框架提供了以下几种类型的通知:

    1. 前置通知(Before):在目标方法执行之前执行的通知。可以在方法执行之前做一些准备工作,如参数校验、权限验证等。

    2. 后置通知(After):在目标方法执行之后执行的通知。可以在方法执行之后做一些收尾工作,如资源的释放、日志的记录等。

    3. 返回通知(AfterReturning):在目标方法成功执行并返回结果后执行的通知。可以获取目标方法的返回值,并进行一些额外的处理,如对返回结果的再加工、缓存等。

    4. 异常通知(AfterThrowing):在目标方法抛出异常后执行的通知。可以捕获目标方法抛出的异常,并进行相应的处理,如进行错误日志记录、异常处理等。

    5. 环绕通知(Around):在目标方法执行前后都可以执行的通知。可以完全控制目标方法的执行过程,包括是否执行目标方法、在执行前后做哪些操作等。

    下面将分别介绍这几种通知的使用方法和操作流程。

    1. 前置通知(Before)

    前置通知会在目标方法执行之前执行,可以用于执行一些准备工作。

    使用方法:

    @Component
    @Aspect
    public class BeforeAdvice {
        
        @Before("execution(* com.example.demo.service.UserService.addUser(..))")
        public void beforeMethod(JoinPoint joinPoint) {
            // 在目标方法执行之前执行的逻辑
            System.out.println("前置通知:执行 addUser 方法之前");
        }
    }
    

    操作流程:

    1. 定义一个前置通知的切面类,并加上@Component和@Aspect注解,使其成为一个Spring组件,并被Spring框架自动扫描并管理。
    2. 在前置通知方法上加上@Before注解,并使用切点表达式指定切点,切点指定了哪个方法之前执行该通知。
    3. 在前置通知方法中编写自己的逻辑,这里输出一行日志。
    4. 在目标方法执行之前,前置通知会被自动执行。

    2. 后置通知(After)

    后置通知会在目标方法执行之后执行,可以用于执行一些收尾工作。

    使用方法:

    @Component
    @Aspect
    public class AfterAdvice {
        
        @After("execution(* com.example.demo.service.UserService.addUser(..))")
        public void afterMethod(JoinPoint joinPoint) {
            // 在目标方法执行之后执行的逻辑
            System.out.println("后置通知:执行 addUser 方法之后");
        }
    }
    

    操作流程:

    1. 定义一个后置通知的切面类,并加上@Component和@Aspect注解,使其成为一个Spring组件,并被Spring框架自动扫描并管理。
    2. 在后置通知方法上加上@After注解,并使用切点表达式指定切点。
    3. 在后置通知方法中编写自己的逻辑,这里输出一行日志。
    4. 在目标方法执行之后,后置通知会被自动执行。

    3. 返回通知(AfterReturning)

    返回通知会在目标方法成功执行并返回结果后执行,可以获取目标方法的返回值并处理。

    使用方法:

    @Component
    @Aspect
    public class AfterReturningAdvice {
        
        @AfterReturning(value = "execution(* com.example.demo.service.UserService.getUserById(..))", returning = "result")
        public void afterReturningMethod(JoinPoint joinPoint, Object result) {
            // 在目标方法执行成功并返回结果后执行的逻辑
            System.out.println("返回通知:执行 getUserById 方法之后,返回结果为: " + result);
        }
    }
    

    操作流程:

    1. 定义一个返回通知的切面类,并加上@Component和@Aspect注解,使其成为一个Spring组件,并被Spring框架自动扫描并管理。
    2. 在返回通知方法上加上@AfterReturning注解,使用value属性指定切点表达式,并使用returning属性指定返回值的变量名。
    3. 在返回通知方法中编写自己的逻辑,这里获取目标方法的返回值并输出日志。
    4. 在目标方法成功执行并返回结果后,返回通知会被自动执行。

    4. 异常通知(AfterThrowing)

    异常通知会在目标方法抛出异常后执行,可以捕获异常并处理。

    使用方法:

    @Component
    @Aspect
    public class AfterThrowingAdvice {
    
        @AfterThrowing(value = "execution(* com.example.demo.service.UserService.getUserById(..))", throwing = "ex")
        public void afterThrowingMethod(JoinPoint joinPoint, Exception ex) {
            // 在目标方法抛出异常后执行的逻辑
            System.out.println("异常通知:执行 getUserById 方法抛出异常,异常信息为: " + ex.getMessage());
        }
    }
    

    操作流程:

    1. 定义一个异常通知的切面类,并加上@Component和@Aspect注解,使其成为一个Spring组件,并被Spring框架自动扫描并管理。
    2. 在异常通知方法上加上@AfterThrowing注解,使用value属性指定切点表达式,并使用throwing属性指定异常的变量名。
    3. 在异常通知方法中编写自己的逻辑,这里捕获目标方法抛出的异常并输出日志。
    4. 在目标方法抛出异常后,异常通知会被自动执行。

    5. 环绕通知(Around)

    环绕通知可以在目标方法执行之前和之后都执行,并可控制是否执行目标方法以及在执行前后做什么操作。

    使用方法:

    @Component
    @Aspect
    public class AroundAdvice {
        
        @Around("execution(* com.example.demo.service.UserService.addUser(..))")
        public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable {
            // 在目标方法执行之前进行操作
            System.out.println("环绕通知:执行 addUser 方法之前");
            
            // 调用目标方法
            Object result = pjp.proceed();
            
            // 在目标方法执行之后进行操作
            System.out.println("环绕通知:执行 addUser 方法之后");
    
            // 返回目标方法的返回值
            return result;
        }
    }
    

    操作流程:

    1. 定义一个环绕通知的切面类,并加上@Component和@Aspect注解,使其成为一个Spring组件,并被Spring框架自动扫描并管理。
    2. 在环绕通知方法上加上@Around注解,并使用切点表达式指定切点。
    3. 在环绕通知方法中编写自己的逻辑,通过ProceedingJoinPoint对象的proceed()方法调用目标方法,可以在调用前后进行操作。
    4. 在目标方法执行之前和之后,环绕通知会被自动执行。

    以上是Spring框架中常见的通知类型的方法、操作流程等的详细介绍,可以根据具体需求选择适合的通知类型进行使用。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部