我不确定我的术语是否正确,但这就是我想要的。我有一个方面,将Log字段注入某些类型,这里是方面代码:
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的代码如何利用方面注入的Log字段?
感谢。
答案 0 :(得分:0)
只需将日志字段的可见性从私有更改为公共,这应该有效。