所以我有一个场景,我想访问使用 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 类,但上下文字段是私有(private)的。是否可以 ?我正在使用加载时编织。
最佳答案
您需要执行几个步骤,假设您的 Object
引用是 obj
那么您可以尝试
Class<?> clazz = obj.getClass();
Field field = clazz.getDeclaredField("context");
field.setAccessible(true);
UriInfo context = (UriInfo) field.get(obj);
关于java - 如何访问aspectj中的私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169181/