Aspectj 如何使ITD在方面主题的代码中可用?

Aspectj 如何使ITD在方面主题的代码中可用?,aspectj,Aspectj,我不确定我的术语是否正确,但以下是我想要的。我有一个方面将日志字段注入到某些类型中,下面是方面代码: public aspect LoggingAspect { private interface HttpHandlerType {} declare parents: (@Path *) implements HttpHandlerType; private Logger HttpHandlerType.Log = Logger.getLogger(getClass());

我不确定我的术语是否正确,但以下是我想要的。我有一个方面将日志字段注入到某些类型中,下面是方面代码:

public aspect LoggingAspect {
  private interface HttpHandlerType {}
  declare parents: (@Path *) implements HttpHandlerType;

  private Logger HttpHandlerType.Log = Logger.getLogger(getClass());

  pointcut httpHandlerMethods(HttpHandlerType o) : within(HttpHandlerType+) && 
    execution(@(GET || PUT || POST || DELETE) public * *.*(..)) && this(o);

  before(HttpHandlerType o): httpHandlerMethods(o) {
    if (o.Log.isInfoEnabled()) {
      o.Log.info(logMethod(thisJoinPoint));
    }
  }

  after(HttpHandlerType o) returning (Object result): httpHandlerMethods(o) {
    if (o.Log.isDebugEnabled()) {
      o.Log.debug(logMethod(thisJoinPoint, result));
    }
  }

  after(HttpHandlerType o) throwing (Exception e): httpHandlerMethods(o) {
    if (o.Log.isEnabledFor(Level.ERROR)) {
      o.Log.error(logMethod(thisJoinPoint), e);
    }
  }

  private static String logMethod(JoinPoint jp) {
    ...
  }

  private static String logMethod(JoinPoint jp, Object result) {
    ...
  }
}
问题是方面主体如何利用这个领域。例如,下面是一个受此方面影响的示例类:

@Path("user")
public class UserHandler {
  @GET
  @Path("{id}")
  public User getUser(@PathParam("id") int id) {
    ...
  }
}
问题是getUser的代码如何利用方面注入的日志字段


谢谢

只需将日志字段的可见性从private更改为public,就可以了。

谢谢,在本例中就足够了。然而,在其他情况下也存在问题-