所以我有一个场景,我想在使用jersey编写的RESTful Web服务中访问上下文变量。
@Path("hello")
public class Hello {
@Context
private UriInfo context;
@GET
@Produces("text/html")
public String getHtml(@Context Request request, @Context HttpServletRequest requestss) {
...
context.getBaseUri();
...
}
在我使用@Around
切入点的方面,我可以看到参数是ARGS:[org.glassfish.jersey.internal.inject.RequestInjectee@7d9d679,org.apache.catalina.connector.RequestFacade@6e8fa5f5]
,因此我可以轻松访问Request对象。
我的方面如下:
@Pointcut("execution(* *.getHtml(..))")
public void methodCall() {}
@Around("methodCall()")
public Object aroundMethodCall(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("AROUND" + pjp.getSignature());
System.out.println("ARGS: "+ Arrays.toString(pjp.getArgs()));
return pjp.proceed();
}
我想在我的方面访问context
变量(记录它)。在我的方面,getThis()方法返回Hello类,但上下文字段是私有的。可能吗 ?我正在使用加载时间编织。
答案 0 :(得分:2)
如果您的Object
引用为obj
,那么您将需要执行几个步骤,然后您可以尝试
Class<?> clazz = obj.getClass();
Field field = clazz.getDeclaredField("context");
field.setAccessible(true);
UriInfo context = (UriInfo) field.get(obj);