2012-07-30 4 views
0

동일한 유형의 다른 장치에 연결하는 프로젝트 작업 중입니다. 단일 장치 용으로 몇 가지 클래스를 구현했지만 모든 "드라이버"가 구현해야하는 일반 인터페이스를 개발했습니다.Java에서 드라이버 개념을 구현하십시오.

내 문제는 지금 : 나중에 사용자가 GUI를 통해 내 프로그램을 사용해야하며 나와 제공 한 드라이버를 "로드"할 수 있어야합니다. 그러나이 운전자들은 어떻게 생겼습니까? 드라이버 인터페이스를 구현하는 클래스가있는 .jar? 대충 무엇을 설명하는 xml 파일?

+3

음. 기본 디자인 작업처럼 들리지만, 실제로 해결해야하는 문제입니다. 그것은 정말로 당신의 요구 사항이 무엇인지에 달려 있습니다. –

답변

0

당신은 출발점으로 다음과 같은 게시물을 고려해 볼 수 있습니다 : https://stackoverflow.com/a/2575156/471129

기본적으로, 의존성 주입 및 제어의 반전은 외부의 구성을 지정하고 동적으로 무엇처럼 보인다, 다른 jar 파일에서 종종 코드를로드하는 데 사용됩니다 너는하려고하는거야. 물론

, 당신은 항상 이런 일에 클래스 이름으로 코드를로드 할 수

public interface IPlugin { 
    // some methods that all the plugins will have in common 
} 

private static IPlugin loadIPluginByClassName(String plugInClassName, ClassLoader classLoader) { 
    // NOTE: throws NoClassDefFoundError or ClassNotFoundException if cannot load the class 
    // or throws ClassCastException if the loaded class does not implement the interface  
    Class<?> cls = classLoader.loadClass(plugInClassName); 
    IPlugin ans = (IPlugin) cls.newInstance() 
    return ans; 
} 

당신은

같이 패키지 자격을 갖춘 클래스 이름과 클래스 로더 loadIPluginByClassName()를 호출해야합니다
IPlugin pi = loadIPluginByClassName("com.test.something.MyPlugin", SomeClassInYourProject.class.getClassLoader()); 

플러그인은 .jar이 클래스 경로에있는 한 자체 .jar 일 수 있습니다.

외부의 .jar에서 그들을로드하지 않으려면, 당신이 사용할 수있는이 그러한 일 수에 도움이 될 수있는 플러그인 클래스에 대한 직접 참조 (생성

IPlugin pi = loadIPluginByClassName(MyPlugin.class.getName(), SomeClassInYourProject.class.getClassLoader()); 

간단 참고로 발견)

+0

이것은 내가 찾고있는 것입니다! – user1406177

관련 문제