런타임에 JAR 파일에서 인터페이스를 구현하는 클래스를로드하는 방법은 무엇입니까?
-
12-11-2019 - |
문제
사용자 구현 클래스를 사용할 수있는 응용 프로그램을 구현하려고합니다.각 클래스는 인터페이스를 정의하는 인터페이스를 구현해야하며 사용자가 구현 한 모든 클래스가 JAR 파일에 보관되어 있습니다.사용자는 jar 파일을 클래스 경로에 복사 한 다음 JAR 파일 이름 만 내 응용 프로그램에만 제공합니다.내 응용 프로그램은 JAR 파일을 동적으로로드 할 수 있어야합니다.이렇게하려면 이 게시물 가 매우 유용합니다.그러나 클래스 이름별로 클래스를로드합니다.나는 그들의 부모를 바탕으로 수업을로드하고 싶습니다.
public class A implements iA {
@Override
int getAValue() { ... }
}
public class B implements iB {
@Override
int getBValue() { ... }
}
.
로드 된 JAR 파일은 A
및 B
클래스가 모두 있습니다.B
인터페이스 이름을 알면 Class iB
클래스에서 인스턴스를 가져 오려고합니다.
어떻게해야합니까?
해결책
이 게시물을 확인하십시오 : 인터페이스 구현 Java 클래스 찾기
원하는대로 해결책에 대해 이야기합니다.
제가 제안 할 것이 가장 가벼운 방법이 아닙니다.하지만 Java의 플러그인 아키텍처와 OSGi의 성공 사례에 대한 기본 사용 사례 중 하나를 설명했습니다.
Apache Felix와 같은 표시등을 사용하여 사용자가 간단한 OSGi.Bundleactivator를 구현하고 OSGi 서비스로 인터페이스 구현을 등록 할 수있는 JAR을 만듭니다. (이것은 단지 멋진 해시지도이며 휴식 서비스 등과는 아무 것도 없습니다).
그런 다음 주어진 인터페이스의 모든 구현을 얻을 수 있습니다. 그 꽤 똑바로 앞으로. http : / /felix.apache.org/site/apache-felix-framework-launching-and-embedding.html