gpt4 book ai didi

java - 注释可以获取上下文对象吗?

转载 作者:行者123 更新时间:2023-11-29 03:33:12 25 4
gpt4 key购买 nike

也许标题是“注解可以获取上下文对象吗?”是不正确的,但我不知道如何给它一个正确和明确的。

我使用Spring AOP + Java Annotation来保存日志,这是我的代码:

类别 Action .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保存到数据库。

现在的问题是注解中的methodDesp是动态的,我想获取this对象并获取它的category属性。

Java Annotation 好像不支持这个,也许支持,但我不知道怎么支持。

最佳答案

您可以做的是在注释值中使用某种表达语言,然后在您的建议代码中运行一些解释器。使用 SPEL 的一个示例可能如下所示:

@ServiceTracker(methodDesp="save category, category name: #{category.name}")

然后在您的建议代码中,您可以提取表达式标记,使用 SpelExpression 并将其作为根对象传递给 target 引用(您可能希望检查 SPEL API 中开箱即用的内容以支持您的用例。

关于java - 注释可以获取上下文对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com