저는 단점은 그것이 더 복잡하다는 것입니다. 주석 처리는 많은 개발자가 익숙하지 않은 완전히 새로운 API 및 개념입니다. Reflection API는 더 쉽고 잘 알려져 있습니다. 일반적으로 런타임에 동일한 작업을 수행 할 수 있습니다.
더 나은 시작 성능이 중요한 경우 (드물게 그렇다면)에 추가 된 복잡성이 필요할 수도 있습니다.
나는 벤치 마크를 신뢰하지 않을 것이다. 그들은 "classpath size가 121MB로 설정되어있다"라고 말하면서 하드 코딩이나 컴파일 시간 처리와의 비교를 전혀 쓸모 없게 만드는 임의의 값입니다. 어쨌든 전체 수업 경로를 왜 스캔 하시겠습니까? 대부분의 경우 개발자 클래스 만 검색하는 것이 더 합리적입니다.
많은 프레임 워크는 구성 파일을 사용하거나 스캔해야 할 클래스 나 패키지를 제한하는 API를 가지고 있습니다. 이렇게하면 시작 시간이 크게 늘어납니다.
이유가이
많은 OSGi 프레임 툴/프레임 워크는이 작업을 수행 할 수있는 많은 도서관이 아니다. 주석을 컴파일 할 때 스캔하고 메타 데이터를 jar 매니페스트 파일에 기록하거나보다 정교한 메타 데이터 파일을 작성합니다. 이 주된 이유는 bnd 및 주석 또는 주석 처리 전에 OSGi 구성 요소의 시간 분석을 빌드하고 컴파일하는 데 사용 된 유사한 도구와의 호환성을 유지하는 것이 더 많은 인기를 얻고 있다고 생각됩니다. 또한 OSGi 구성 요소는 고유 한 라이프 사이클을 가지며 언제든지오고 갈 수 있습니다. 따라서 응용 프로그램 시작시 한 번만 검사 할 수는 없으므로 시작 시간이 조금 더 중요합니다. 구성 요소 (다시)가 시작될 때마다 주석을 스캔해야합니다.
나는 그것이 좋거나 나쁘다고 말하지 않을 것입니다. 요구 사항에 맞는이 기술을 사용하십시오. 나는 몇 밀리 초의 시작 시간을 위해 많은 복잡성을 추가하는 것을 피할 것이다.
[조숙 한 최적화] (http://c2.com/cgi/wiki?PrematureOptimization)와 같이 들립니다. 벤치 마크를 수행 했습니까? –
ClassIndex는 몇 가지 흥미로운 벤치 마크를 수행했습니다. 조숙 한 최적화가 될 수 있지만 문제는 남아 있습니다. 내 생각에 내가 생각하는 도서관에서 중요한 디자인 관심사이기도하다. –
링크에서 인용하면 * Java ** 응용 프로그램 부트 스트랩 **이 상당히 많이 증가합니다 * 한 번 실행하는 동안 일반적으로 (또는 사용자의) 응용 프로그램이 몇 번 부트 스트랩한다고합니까? 마지막으로, "Reflections Maven plugin"은 거의 동일한 성능을 발휘하는 것으로 보인다. (단 하나의 공개 된 벤치 마크에서) ... –