3

Java 애노테이션을 특정 메소드에 추가하기 위해 .class 파일을 수정하는 방법이 있습니까? 기본적으로 jar 파일의 각 클래스 파일의 메서드를 탐색하고 특정 클래스 파일에 주석을 추가하려고합니다. jar 파일을 사용하는 동안 이것은 실행시에는 발생하지 않습니다. 오히려, 끝나면 주석으로 클래스 파일을 수정하고 싶습니다.역순으로 Java 어노테이션을 메소드에 추가 하시겠습니까?

나는 소스 코드에 액세스 할 수 않기 때문에 자동으로 소스 코드 수정이 있는지, 즉 내가 도구 등 Javassist 또는 ASM이 필요합니다 있으리라 믿고있어 ...뿐만 아니라

을 작동합니다. 그렇다면 어느 것을 사용해야합니까? 어떻게해야합니까?

+0

는 그것은을 .class 파일의 방법 필드에 적절한 속성을 추가하여이 작업을 수행 할 확실히 가능합니다. 하지만이 작업을 수행하는 도구를 사용하는 데 많은 경험이 없습니다. – templatetypedef

+0

그게 나을 것 같네요. 누군가가 곧 대답 할 수 있기를 바랍니다. :) – Epaga

답변

4

내 질문에 완전히 대답하는 것으로 보이는 this article이 1 시간 동안 인터넷 검색으로 표시됩니다. ASM을 사용합니다. 변경된 바이트 코드를 사용하여 클래스 파일을 작성하려면 ClassWriter을 사용하십시오.

글쎄, 그때 일할 시간, 그렇 겠지. :)

6

사실, 이것은 AspectJ를위한 고전적인 사용 사례입니다 : 내가 직접 바이트 코드 조작이 더 강력 함을 부여되지만

declare @method : public * BankAccount+.*(..) : @Secured(role="supervisor") 

는 AspectJ를 훨씬 더 사용자 친화적이며, 그것은 즉시 제공 당신이 뭔가 잘못하고있을 때 컴파일러 경고.

또한 Load Time Weaving을 사용하는 경우 클래스로드 시간에 위빙되기 때문에 원본 라이브러리 항아리를 변경하지 않고 그대로 둘 수 있습니다.

참조 :

관련 문제