spring获取连接点参数的两种方法

在一个系统中,我们希望在用户在登录的前后记录日志,并将用户的登录信息(登录参数)记录到日志中。我们可以用spring aop来实现这个功能。在本文将会展示两种spring aop获取参数的方法。

1 首先新建个LoginController,有一个login方法

@RequestMapping("login")
	public String login(String name,String password){
		System.out.println("登录中...");
		return "login";
	}
2 新建一个切面类,在新建切点的时候可以通过args来绑定参数具体代码如下,另外一种获取参数的方式是 在@Around 中通过ProceedingJoinPoint 来获取参数

@Aspect
@Component //注意点1:必须将这个切面类注册为bean,可以在这里通过@Component 注入,也可以自己在xml中注入
public class LogAspect {

	@Pointcut("execution(* com.zsq.cn.login.controller.LoginController.login(String,String)) "
			+ "&& args(name,password)") //注意点2:args的参数必须与连接点方法的参数一样
	public void login(String name,String password){}


	@Before("login(name,password)")
	public void beforeLogin(String name,String password){
		System.out.println("登陆之前,用户名:"+name+",密码"+password);
	}

	@After("login(name,password)")
	public void afterLogin(String name,String password){
		System.out.println("登陆之后(无论成功还是失败),用户名:"+name+",密码:"+password);
	}

	@AfterReturning("login(name,password)")
	public void afterLoginReturn(String name,String password){
		System.out.println("登陆成功之后,用户名:"+name+",密码"+password);
	}
	
	@AfterThrowing(value="login(name,password)",throwing="e")
	public void afterLoginThrow(String name,String password,Exception e){
		System.out.println("登陆失败之后,失败信息:"+e.getMessage());
	}
	
	@Around("login(name,password)") //注意点3:下面方法必须将ProceedingJoinPoint point参数放到第一个位置 否则启动报错
	public Object aroundLogin(ProceedingJoinPoint point,String name,String password) throws Throwable{
		System.out.println("通过ProceedingJoinPoint获取参数数组"+Arrays.toString(point.getArgs()));
		return point.proceed();
	}
}
上面的代码有三个注意的地方,我已经在代码中标注出来了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值