Spring注解之AOP功能测试

发表于:2021-3-11 09:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:用户UUID    来源:掘金

  概念
  1.连接点
  可以被增强的方法。
  2.切入点
  实际被增强的方法。
  3.通知(增强)
  实际增强的部分, 比如加的日志。
  4.切面  (是动作)
  把通知应用到切入点过程。
  通知类型
  · 前置通知@Before
  · 后置通知@After 方法执行之后(有没有异常都执行)
  · 环绕通知@Around 方法之前之后都有, 方法里有参数(ProceedJoinpoint 表示要增强的方法)
  · 异常通知@AfterThrowing 异常才执行
  最终通知@AfterReturning 返回值之后执行(有异常不执行了)。
  步骤
  要求:
  有一个普通类, 有一个切面类(带@Aspect注解),都要加入容器中。
  开启切面功能@EnableAspectJAutoProxy;
  普通类:
@Controller
@ComponentScan("com.alex.aop1")
@EnableAspectJAutoProxy // 开启切面功能
public class MathCalculator {

    public int div(int i, int j) {
        return i/j;
    }
}
  切面类:
@Aspect
@Controller
public class LogAspects {
// 切入点表达式写法
    @Pointcut("execution(public * com.alex.aop1.MathCalculator.*(..))")
    private void pointCut() {}

    // @Before切入
    @Before("pointCut()")//切入点表达式
    public void logStart() {
        System.out.println("除法运行...参数运行列表时: {}");
    }
    @After("pointCut()")
    public void logEnd() {
        System.out.println("除法...结束: ");
    }
    @AfterReturning("pointCut()")
    public void logReturn() {
        System.out.println("除法...返回: {}");
    }
    @AfterThrowing("pointCut()")
    public void logException() {
        System.out.println("除法...异常: {}");
    }
}
  解释: pointCut方法, 抽取出来的切入点表达式, 可以在不同的通知处使用。
  返回值/异常/方法信息
  打印参数名和参数值
  如果希望获取到函数的参数, 签名等, 就需要代入JoinPoint joinPoint作为方法参数。
  打印返回值。
  步骤:
  1.returning = "result" 设定一个变量名result;
  2.Object result 方法签名传入result;
  3.方法体里就可以拿到返回值了。
@AfterReturning(value = "pointCut()", returning = "result")
    public void logReturn(Object result) {
        System.out.println("除法...返回: {"+ result +"}");
    }
  异常
  同上。
    @AfterThrowing(value ="pointCut()", throwing = "e")
    public void logException(Exception e) {
        System.out.println("除法...异常: {"+ e +"}");
    }

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • lifewange
    2021-3-11 15:18:32

    讲的非常好

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号