【发布时间】:2013-11-23 23:24:22
【问题描述】:
所以我有一个场景,我想访问使用 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],因此我可以轻松访问请求对象。
我的方面如下:
@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 类,但上下文字段是私有的。可能吗 ?我正在使用加载时间编织。
【问题讨论】:
-
你能在你的 Hello 类中添加一个公共的
getContext()方法吗?否则,无论如何,对于 Java 7 及更高版本,我会查看 MethodHandle。 -
@ElliottFrisch 不,我不能,我的想法是不要对球衣应用程序进行侵入式日志记录(不是我写的)
-
@ElliottFrisch 是的 java 7
-
然后你可以使用MethodHandle
-
@ElliottFrisch MethodHandle 的问题是我需要知道类型并在使用前导入它。在我的场景中,我将在执行期间学习类型。
标签: java tomcat jersey aspectj