AOP切面逻辑实现后,原有正常业务代码失效?

news/2025/2/22 3:07:28/

问题代码展示

	@Override@Around("@annotation(sessionChange)")public void aroundSessionChange(SessionChange sessionChange) {SessionChangeAspect.super.aroundSessionChange(sessionChange);}
	/*** 模拟登录* @return*/@GetMapping("/logon")@SessionChange(increment = true)public String logon() {return "登录成功";}

问题分析与解决

  1. 切面方法的签名和用法

    • aroundSessionChange 方法的定义有误。@Around 注解的方法应该接收一个 ProceedingJoinPoint 类型的参数,而不是注解类型的参数。ProceedingJoinPoint 提供了继续执行拦截方法的能力。
  2. 调用 proceed() 方法

    • @Around 注解的方法内,你需要调用 joinPoint.proceed() 来继续执行原始的方法调用。如果没有调用这个方法,原始方法(如你的 logon 方法)将不会被执行,这解释了为什么没有输出。

正确的实现

这里是 aroundSessionChange 方法的一个正确实现示例:

@Around("@annotation(sessionChange)")
public Object aroundSessionChange(ProceedingJoinPoint joinPoint, SessionChange sessionChange) throws Throwable {try {// 在原始方法之前的逻辑,比如增加会话计数// 继续执行原始方法return joinPoint.proceed();} finally {// 在原始方法之后的逻辑,比如减少会话计数}
}

在这个实现中,joinPoint.proceed() 负责继续执行被 @SessionChange 注解标记的方法。这确保了你的 logon 方法能够被执行,并且其返回值(“登录成功”)能够被正确处理。

总结

logon 方法没有输出预期的消息,很可能是因为切面方法没有正确实现,导致原始方法没有被执行。请确保你的切面方法遵循了正确的 @Around 注解用法,并且正确地调用了 joinPoint.proceed()
在这里插入图片描述


http://www.ppmy.cn/news/1300344.html

相关文章

k8s--集群调度(kube-scheduler)

了解kube-scheduler 由之前博客可知kube-scheduler是k8s中master的核心组件之一 scheduler:负责调度资源。把pod调度到node节点。他有两种策略: 预算策略:人为部署,指定node节点去部署新建的pod 优先策略:通过算法选…

React Native 桥接原生原子组件

一、实现一个原生自定义组件 InfoView 1、新建一个package 包 view 和一个 class 类 InfoView ,InfoView 继承自类 LinearLayout ,LinearLayout 类提供了布局管理功能。 package com.awesomeproject.view;import android.content.Context; import andro…

创建ROS模型与小机器人地图规划

1、打开自己的VM系统 2、安装小机器人的安装包,输入如下命令,回车输入密码(自己设的): sudo apt install ros-noetic-turtlebot3-simulations ros-noetic-turtlebot3-slam ros-noetic-turtlebot3-navigation 提示我之前安装过了 3、用rosla…

react中概念性总结(三)

目录 React中事件绑定函数的方法有哪些? 函数如何传递参数? 什么是重绘与回流,触发条件,如何减少回流和重绘 React 生命周期中 getDerivedStateFromProps怎么使用,怎么理解? React中路由单页面应用的优缺点都有哪些…

uniapp自定义顶部导航并解决打包成apk后getMenuButtonBoundingClientRect方法失效问题

需求:要在app上的顶部导航提示哪里添加一些东西进去,用uniapp自带的肯定不行啊,所以自定义了所有的页面的顶部导航,之后自定义后用手机调试发现 uni.getMenuButtonBoundingClientRect()这个方法的top获取不到....网上找了很多种方…

【ChCore Lab 00】ChCore Lab 环境简单搭建

[实验环境]: OS: Ubuntu 22.04 LTS 1. 搭建编译和运行环境 实验环境至少需要 arm-gcc、docker 其中之一或者 qemu。首先 git 是必不可少的。 sudo apt-get install git -y安装交叉编译工具链。 sudo apt-get install gcc-aarch64-linux-gnu安装lab运…

docker部署simpleDocker

1,安装docker,请参考 linux安装docker 2,安装docker-compose,请参考 Docker-Compose 3,安装simpleDocker 准备docker-compose.yml文件 version: 3 services:redis:container_name: redisimage: redis:latestweb:conta…

【Java万花筒】日志与性能监控:Java日志领域的掌中宝剑

“日志与性能监控:Java开发者的得力助手 前言 在现代软件开发中,日志记录和性能监控是确保应用程序健康运行的不可或缺的组成部分。为了满足开发者对灵活性和性能的需求,Java 社区涌现出多个强大的库,本文将深入探讨其中几个关键…