2017-09-18 5 views

답변

3

실제 질문인지 여부는 알 수 없습니다. 서비스 공급자를 선택하는 올바른 방법은 기능을 탐색하는 것입니다. 즉, 소비자가 적절한 구현을 선택할 수 있도록 적절한 서비스 인터페이스를 설계하는 것입니다.

ServiceLoader.load(service).stream() 
     .filter(p -> "X".equals(p.type().getModule().getName())) 
     .map(Provider::get) 
     .findAny(); 
:

이 질문은 당신이 정말로 필요로하는 경우 모듈 이름을 선택하는 것은 어렵지 않다 다음 특정 서비스 공급자를 사용하도록 뭔가를 구성하는 방법에 대한 경우

3

ModuleDescriptor.Provides은 모듈에서 제공하는 서비스의 이름을 제공 할 수 있습니다.

Module module; // representation for your 'my.module' 
Set<ModuleDescriptor.Provides> provides = module.getDescriptor().provides(); 
provides.forEach(p -> { 
    System.out.println("service - " + p.service()); 
    System.out.println("providers - " + p.providers()); 
}); 

모듈 선언 인 경우 다음과 같이

AnnotateElemenImpl 클래스 java.lang.reflect 모듈에서 인터페이스의 AnnotatedElement 된 구현을 제공
module my.module { 
    ... 
    provides java.lang.reflect.AnnotatedElement with AnnotateElemenImpl; 
} 

. 위의 공유 코드 세그먼트는 다음과 같은 세부 정보를 반환합니다.

service - java.lang.reflect.AnnotatedElement 
providers - [com.module.AnnotateElemenImpl]