伪代码:
@Subject //aop注解
public void onMessage() {
//通过ThreadLocal获取当前主题
Subject subject = req.get();
//some
}
```
@Before("messagePoint()")
public void setContext(JoinPoint jp) {
MethodSignature signature = (MethodSignature) jp.getSignature();
Method method = signature.getMethod();
Object[] arguments = jp.getArgs();
for (Object argument : arguments) {
if (argument instanceof MessageDTO) {
MessageDTO e = (MessageDTO) argument;
try (UserContext ctx = new UserContext(e)) {
//调用onMessage()方法
method.invoke(object, arguments);
}
}
}
}
有一个问题: 在before里面会通过反射调用一次`omMessage()`方法,执行完before后又会执行一次omMessage(). 有什么好办法解决执行一次没? 之所以设计成这样是实现了`AutoCloseable close()方法`依靠它的特性自动remove threadlocal.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…