4

현재 진행중인 프로젝트에서 런타임시 Java 클래스를 생성해야합니다. 나중에이 클래스를 사용할 때 반사를 사용하지 않아야합니다.Javassist 대. Java 컴파일러 API

저는이를 수행하기위한 현재 솔루션을 찾고 있었으며 Javassist 및 Java 6 Java Compiler API를 발견했습니다.

그래도 난 혼란 스러워요 :와 Javassist가 클래스를 생성하는 데 사용하는 일

  1. ? 그것은 반사 또는 무언가를 사용합니까?

  2. 나는 몇 가지 테스트를 코딩하고 아주 쉽게 소스 코드에서 바이트 코드 를 생성하고, 생성 된 바이트 코드에서 클래스를로드하기 위해서 발견했습니다. Javassist를이 솔루션에 사용하면 어떤 이점이 있습니까?

답변

6

Javassist에는 Java 스 니펫을 바이트 코드로 변환 할 수있는 작은 포함 컴파일러가 포함되어있어 몇 가지 옵션이 있습니다. 기존 클래스의 "System.out.println (....)"또는 "log.debug (...)"문

나는이 기사를 어떻게 작성했는지 보여주는 글을 썼다. http://blogs.oracle.com/CoreJavaTechTips/entry/add_logging_at_class_load을 참조하십시오. 참고 : 프로덕션 설정의 경우이 방법을 사용하면 안됩니다. 그런 다음 응용 프로그램에서 Aspect Oriented Programming을 사용해야합니다.

+0

이 경우 클래스 변환을 수행 할 필요가 없습니다. 아직도 Javassist가 여전히 더 훌륭하다고 생각하니? 아니면 제가 어느 것에 대해 정말로 중요하지 않습니까? – halfwarp

+0

정확히 수행해야하는 작업에 따라 다릅니다. 질문에 유스 케이스를 추가하십시오. –

+0

반사 나 방문자 패턴과 같은 것을 사용하지 않으려면 간단한 산술 표현식 평가 방법입니다 ... – halfwarp