0
点赞
收藏
分享

微信扫一扫

AOP实现常见的5种通知(增强) 【前置通知 Before、后置通知 afterReturning、环绕通知 Around、异常通知 AfterThrowing、最终通知 after】

小桥流水2016 2022-03-11 阅读 43

AOP实现常见的5种通知(增强) 【前置通知 Before、后置通知 afterReturning、环绕通知 Around、异常通知 AfterThrowing、最终通知 after】

全注解写的,多看几遍就会了

导入依赖

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.13</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.13</version>
        </dependency>

config类

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration//配置类
@ComponentScan("text")//扫描bean
@EnableAspectJAutoProxy//扫描AOP文件
public class Configration {
}

aop类

import lombok.extern.java.Log;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Log//日志包,可以不要,用sout一样
@Aspect//AOP操作
@Component//bean
public class AopText {

    @Before("execution(* text.entry.Student.say(*))")
    public void before(JoinPoint joinPoint){
        System.out.println(Arrays.toString(joinPoint.getArgs()));
        log.info("这是say方法之前的日志");
    }

    @AfterReturning(value = "execution(* text.entry.Student.say(*))",returning = "obj")
    public void after(Object obj){
        System.out.println(obj);
        log.info("这是say方法之后的日志");
    }

    //    around方式,注意,around方法需要有返回值
    @Around("execution(* text.entry.Student.say(*))")
    public Object text(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("say方法执行之前的操作");
        Object proceed = joinPoint.proceed();
        System.out.println("say方法执行之后的操作");
        return proceed;
    }


}

main

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import text.config.Configration;
import text.entry.Student;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(Configration.class);
        Student student = context.getBean(Student.class);
        student.say("hello");


    }
}

student实体类

import org.springframework.stereotype.Component;

@Component//bean
public class Student {
    public String say(String say){
        System.out.println("这是学生类的方法");
        return say;
    }
}

举报

相关推荐

0 条评论