2013-11-23 5 views
2

그래서 저지를 사용하여 작성된 RESTful 웹 서비스에서 컨텍스트 변수에 액세스하려는 시나리오가 있습니다. [[email protected],[email protected]], 그래서 쉽게 Request 객체에 액세스 할 수 있습니다 내가 인수 ARGS 것을 볼 수 있습니다 @Around 포인트 컷을 사용하여 내 측면에서aspectj에서 private 변수에 액세스하는 방법

@Path("hello") 
public class Hello { 

@Context 
private UriInfo context; 

    @GET 
    @Produces("text/html") 
    public String getHtml(@Context Request request, @Context HttpServletRequest requestss)  { 
    ... 
    context.getBaseUri(); 
    ... 
    } 

. 다음과 같이

내 측면은 다음과 같습니다

@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입니다. 가능한가? 나는 로딩 타임을 사용하고 있습니다.

+0

당신이 당신의 안녕 클래스 공개'는 getContext()'방식을 추가 할 수 시도 할 수있다 가정, 몇 단계를 수행 할 필요 해요? 그렇지 않으면 Java 7 이상에서 [MethodHandle] (http://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html)을 참조하십시오. –

+0

@ElliottFrisch 아니, 그 생각은 저지 애플 리케이션 (나를 쓰지 않은)에 대한 침입 로깅을하지 않는 것입니다 – Darek

+0

당신은 자바 7에 있습니까? –

답변

2

당신은 당신의 Object 참조 obj은 다음

Class<?> clazz = obj.getClass(); 
Field field = clazz.getDeclaredField("context"); 
field.setAccessible(true); 
UriInfo context = (UriInfo) field.get(obj); 
관련 문제