多分タイトル「アノテーションはコンテキストオブジェクトを取得できますか?」は正しくありませんが、正しく明確にする方法がわかりません。
Spring AOP + Java Annotation を使用してログを保存します。コードは次のとおりです。
CategoryAction.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
たいと考えています。this
category
Java Annotation はこれをサポートしていないようです。おそらくサポートしていますが、方法がわかりません。