Chapter 2 of Effective Java에서 논의 된대로 "서비스 제공 업체 프레임 워크"를 참조합니다.이 서비스는 String
을 기반으로 런타임에 여러 클래스 중 하나를 인스턴스화해야하는 문제를 처리하는 데 올바른 방법처럼 보입니다 , Configuration
개체 (기본적으로 XML 스 니펫) :간단한 Java "서비스 제공 업체 프레임 워크"?
그러나 개별 서비스 공급자 (예 : 일련의 기본 공급자 + 일부 사용자 지정 공급자)가 자신을 등록하려면 어떻게해야합니까?
interface FooAlgorithm
{
/* methods particular to this class of algorithms */
}
interface FooAlgorithmProvider
{
public FooAlgorithm getAlgorithm(Configuration c);
}
class FooAlgorithmRegistry
{
private FooAlgorithmRegistry() {}
static private final Map<String, FooAlgorithmProvider> directory =
new HashMap<String, FooAlgorithmProvider>();
static public FooAlgorithmProvider getProvider(String name)
{
return directory.get(serviceName);
}
static public boolean registerProvider(String name,
FooAlgorithmProvider provider)
{
if (directory.containsKey(name))
return false;
directory.put(name, provider);
return true;
}
}
MyFooAlgorithm 및 MyFooAlgorithmProvider를 작성하여 FooAlgorithm을 구현하고 jar 파일로 배포하면 registerProvider가 자동으로 호출되도록하는 방법이 있습니까? 아니면 알고리즘을 사용하는 클라이언트 프로그램에서 FooAlgorithmRegistry.registerProvider()를 명시 적으로 호출해야합니다. 그들이 원하는 각 수업마다?
각주로 : Java6 – dfa
+1이 책의 참고 용으로 고마워요. –
흥미 롭습니다. 그래서 답변은 서비스 제공 업체 구성 파일을 포함하는 JAR 파일 메커니즘이 있다고 보입니다. –