也许标题“注释可以获取上下文对象吗?” 是不正确的,但我不知道如何给它一个正确和明确的。
我使用 Spring AOP + Java Annotation 来保存日志,这是我的代码:
类别操作.java:
@ServiceTracker(methodDesp="save category, category name:"+this.category.getName())
public String save() throws Exception
{
this.categoryService.save(this.category);
this.setJsonDataSimply(null);
return "save";
}
TrackAdvice.java:
public Object trackAround(ProceedingJoinPoint point) throws Throwable
{
String log = "success";
ServiceTracker tracker = null;
Method method = null;
AbstractAction action = null;
try
{
Object result = point.proceed();
action = (AbstractAction) point.getTarget();
MethodSignature signature = (MethodSignature) point.getSignature();
method = signature.getMethod();
tracker = method.getAnnotation(ServiceTracker.class);
return result;
}
catch (Exception e)
{
log = e.getMessage();
throw e;
}
finally
{
if (tracker != null)
{
String userId = (String) ActionContext.getContext().getSession().get(Constant.USERID);
if (userId == null)
{
userId = "unknown";
}
TrackLog t = new TrackLog();
t.setWhen(new Date());
t.setUserId(userId);
t.setResult(log);
t.setMethodName(action.getClass().getCanonicalName() + "." + method.getName());
t.setMethodDesp(tracker.methodDesp());
this.trackService.save(t);
}
}
}
ServiceTracker
是我自己的注解,在我的TrackAdvice
类中,我得到当前执行的方法,如果方法有ServiceTracker
注解,则将methodDesp
in注解保存到数据库。
现在的问题是methodDesp
in 注释是动态的,我想获取this
对象并检索其category
属性。
Java Annotation 似乎不支持这个,也许它支持但我不知道如何。