SpringAOP切入点规范及获取方法参数

切入点规范

@Pointcut("execution(* com.example.server.service.TeacherService.*(..))")

上面的切入点会切入com.example.server.service.TeacherService下面的所有方法。下面来详细介绍一下切入点表达式的规范。
1、execution():表达式主体。

2、第一个位置:表示返回类型, *号表示所有的类型。

3、第二个位置:表示需要拦截的包名.类名.方法名(方法参数)。
需要注意的是必须是全类名。其中可以使用*表示所有包。比如说:com.example.server.service.表示service包下的所有类;com.example.server..则表示server包下的所有包及其所有类。
可以具体指定某一个方法,也可以用
表示该类的所有方法(满足之前的返回类型)
同样,参数可以是具体的,例如:(int, String),也可以用(..)来表示任意参数。(只有参数匹配的方法才能被切入)

AOP中获取方法参数

"execution(* com.example.server.service.TeacherService.uploadExperience(..)) && args(userId)"

大家可以看到,在以上表达式的基础上添加了一点改动,这样我们就能在AOP中获取到切入方法调用时的参数,这样我们就能在AOP方法中使用这个参数。
以下是一个示例:

	@After("execution(* com.example.server.service.TeacherService.uploadExperience(..)) && args(userId)")
    public void updateLevel(Long userId){
		//代码块,现在就可以在代码块中使用userId
    }

AOP获取session的参数

有时需要在AOP中使用到之前存储在session中的值。其实这也非常简单。

 		ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
        HttpSession session = attr.getRequest().getSession(true);
        long userId = (long) session.getAttribute(USER_ID);

同理,我们通过ServletRequestAttributes也可以获取到request和response

		HttpServletResponse response = attr.getResponse();
        HttpServletRequest request = attr.getRequest();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值