분류 전체보기 (199)
ººº::Development™:: (66)
ººº::Learning™:: (31)
ººº::Information™:: (37)
ººº::Note™:: (11)
ººº::Photo™:: (50)
ººº::zEtc™:: (3)
rss

믹시
tistory 티스토리 가입하기!
2008. 8. 12. 17:40
이번 프로젝트에서 로그분석 엔진을 만드는 과정에서 어떻게 만들까 고민을 하다가 플러그인 형식으로 작성을 해보자 생각을 하고 프로젝트를 진행하는 과정에서 어떻게 작성한 플러그인을 메인 클래스에서 로드를 할까? 고민을 하다가 찾은 방법으로 다 필요없이 ja자체를 동적으로 로드하는 방법인다.

열마다 말보다 한번의 소스코드가 더 보기 편하다.
String   strTemp   = "mainClass";
File jarFile    = new File( "jar file path" );
URL[] urls = new URL[]{ new URL( "jar:" + file.toURL() + "!/" ) };
ClassLoader    classLoader = new URLClassLoader( urls );
Class    tempClass    = classLoader.loadClass( temp.mainClass );        // plugin class load
Object    object    = tempClass.newInstance();
Method    method    = tempClass.getMethod( "optionSet",
                                                            new Class[]{
                                                                    strTemp.getClass()
                                                            } );
method.invoke( object, strTemp );

알아 보겠는가?

모르면 그냥 일단 작성해보면서 알아보면 된다.ㅋㅋㅋ 나도 그랬으니깐( 완전 깡패.. )
다른코드는 크게 상관이 없지만 jar 파일을 로드할 때와 단순한 class파일을 로드할 때 약간의 차이가 있다.
아래는 클래스를 로드할 때의 코드이다.
File jarFile    = new File( "class package path" );      // 파일명이 아닌 폴더면만 기제
URL[] urls = new URL[]{ new URL( file.toURL() ) };

틀린점을 구분하겠는가?
jar파일을 로드할 때는  URL class에 jar를 로드한다는 것을 명시해 줘야 한다는 것이다.

그리고 로드가 정상적으로 이루어졌으면 다른 코드는 크게 상관이 없지만 로드한 클래스의 method를 호출 하는 방법을 설명하겠다.
Method 클래스는 자신이 호출 하고자 하는 method의 파라미터 type을 설정해 주고 실제 method 호출과 파라미터 전달은 method class의 invoke method를 이용해서 호출해 주면 된다.