java - 如何访问aspectj中的私有(private)变量

标签 java tomcat jersey aspectj

所以我有一个场景,我想访问使用 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/

相关文章:

java - 解释 java.util.Date

spring - 如何在内存中进行单元测试 Spring-Jersey

java - JComboBox 添加值

jsf - java.lang.IllegalArgumentException : javax. 面.lifecycle.ClientWindowFactory

java - Struts2 文件下载权限被拒绝

java - 在哪里/如何为 Tomcat .war 文件设置配置资源

java - 配置 Jersey 1.x 项目以生成 swagger 文档

java - Restful WebService 的问题

java - 使用 javadoc 忽略小错误

java - 用于根据规则集重命名/移动文件的 Java API