2012-03-02 2 views
1

클라이언트 대신 임의의 클래스의 인스턴스를로드하는 프레임 워크가 있고 필드 (특히 비공개 필드)가 필드에 처음 액세스 할 때만 지연/초기화를 수행하기를 원합니다.게으른 로딩을 수행하는 개인 필드 액세스를 가로 채기

값이 반환되기 전에 이러한 개인 필드 액세스를 가로 채고 필드에 값을 주입 할 수 있습니까 (아마도 "캐시"할 수도 있습니다)?

java.lang.reflect.Proxy/InvocationHandler는 메소드 호출을 인터셉트 할 수 있기 때문에 제외 된 것으로 보입니다.

바이트 코드 조작 라이브러리가 이것을 처리 할 수 ​​있다는 느낌이 들었습니다. ASM, Javassist, BCEL, cglib을 살펴 보았지만이 모든 것을 검색했지만이를 달성하는 방법에 대한 명확한 지침을 찾지 못했습니다.

답변

0

이것은 확실히 ASM 또는 유사한 프레임 워크를 사용하는 바이트 코드 도구로 수행 할 수 있지만 일부 JVM 내부뿐만 아니라 바이트 코드 내부 작업도 이해해야합니다.

쉬운 접근 방법은 AspectJ를 사용하고 객체에 aspect를 적용하는 것이다. 이 AOSD'07 paper에는 자바 객체의 투명 클러스터링과 비슷한 예제가 있습니다.

+0

답장을 보내 주셔서 감사합니다. 임박한 aspectj는 나를 위해 작동하지 않는다. 왜냐하면 나는 시간 의존성을 컴파일하지 않기를 원하기 때문이다. – deephacks