我现在正在学习spring aop,我不知道将上下文参数传递给建议。
注意我的意思是context
论点,而不是normal
论点。
传递普通参数很简单,例如:
a join point:
public void read(String something){
}
@Aspect
public class SessionAspect {
@Pointcut("execution(* *.*(String)) &&args(something)")
public void sess() {
}
@Before("sess()")
public void checkSessionExist(String something) {
//Here
}
}
然后something
参数将传递给通知checkSessionExist
。
但是我想获得像 HttpSession 或其他东西这样的上下文参数怎么样?
a join point:
public void listUser(){
dao.list(User.class,.....);
}
@Aspect
public class SessionAspect {
@Pointcut("execution(* *.*(String))")
public void sess() {
}
@Before("sess()")
public void checkSessionExist(String something) {
//Here
}
}
在此示例中,listUser
仅允许登录用户加入连接点。
所以我想检查当前的HttpSession中是否有一个标识,所以我需要在advice中获取一个HttpSession的实例checkSessionExist
。
但是如何获得呢?
最简单的方法是将参数添加HttpSession
到所有关节点,如下所示:
public void listUser(HttpSession session){
dao.list(User.class,.....);
}
然而,这已经违背了它自己的 AOP。在我看来,连接点甚至不需要知道Aspect的存在,不是吗?
如何解决?