API 사용자로부터 서비스 (인터페이스)의 구현 (구체적인 클래스)을 숨기려고합니다. 구현은 Java API ServiceLoader 메커니즘을 사용하는 팩토리에서 사용자에게 제공됩니다. 이 로더는 구현 클래스가 공개되어 있어야합니다. 구현이 사용자가 직접 의존하지 않는 다른 JAR (API JAR은 제외)에 숨겨져있는 한 괜찮습니다.서비스 구현을 숨기기위한 모범 사례
그러나 쉬운 배포를 위해 기본 구현을 사용하는 JAR의 내용은 API JAR로 압축됩니다. 따라서 사용자는 공개 된 가시성을 가진 기본 구현 클래스가있는 미리 구성된 JAR에 의존합니다. 사람들이 구현을 직접 인스턴스화하지 못하게하는 것은 없습니다. 나는 그것이 가능하기를 원하지 않는다.
내 나쁜 아이디어 :
- 패키지 개인 구현을로드 할 수 있습니다 ServiceLoader의 자신의 버전을 구현 (? BTW, 왜 자바 API ServiceLoader이 허용하지 않습니다 않습니다)
- 선박 별도의 API 및 구현 JAR
옳은 길이라고 생각합니까? 어떤 타협이라도?
OSGi 또는 기타 중장비 사용은 의문의 여지가 있습니다.
음, 이것이 내가 예상 한 것입니다. 어쩌면 라이브러리가있는 POM 템플릿을 제공 할 수도 있습니다. 하지만 패키지 개인 ServiceLoader도 유효한 방법이 아닌가요? 그 접근법을 분류 할 특별한 이유가 있습니까? 고맙습니다. – Alexander
아니요 패키지 개인도해야합니다. 가장 자주 (저급) 수업 중 일부는 공개되어야합니다. –