gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:14:57 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com