'ClassLoader'에 해당되는 글 1건
2008. 8. 12. 17:40
이번 프로젝트에서 로그분석 엔진을 만드는 과정에서 어떻게 만들까 고민을 하다가 플러그인 형식으로 작성을 해보자 생각을 하고 프로젝트를 진행하는 과정에서 어떻게 작성한 플러그인을 메인 클래스에서 로드를 할까? 고민을 하다가 찾은 방법으로 다 필요없이 ja자체를 동적으로 로드하는 방법인다.
열마다 말보다 한번의 소스코드가 더 보기 편하다.
알아 보겠는가?
모르면 그냥 일단 작성해보면서 알아보면 된다.ㅋㅋㅋ 나도 그랬으니깐( 완전 깡패.. )
다른코드는 크게 상관이 없지만 jar 파일을 로드할 때와 단순한 class파일을 로드할 때 약간의 차이가 있다.
아래는 클래스를 로드할 때의 코드이다.
틀린점을 구분하겠는가?
jar파일을 로드할 때는 URL class에 jar를 로드한다는 것을 명시해 줘야 한다는 것이다.
그리고 로드가 정상적으로 이루어졌으면 다른 코드는 크게 상관이 없지만 로드한 클래스의 method를 호출 하는 방법을 설명하겠다.
Method 클래스는 자신이 호출 하고자 하는 method의 파라미터 type을 설정해 주고 실제 method 호출과 파라미터 전달은 method class의 invoke method를 이용해서 호출해 주면 된다.
열마다 말보다 한번의 소스코드가 더 보기 편하다.
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 );
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() ) };
URL[] urls = new URL[]{ new URL( file.toURL() ) };
틀린점을 구분하겠는가?
jar파일을 로드할 때는 URL class에 jar를 로드한다는 것을 명시해 줘야 한다는 것이다.
그리고 로드가 정상적으로 이루어졌으면 다른 코드는 크게 상관이 없지만 로드한 클래스의 method를 호출 하는 방법을 설명하겠다.
Method 클래스는 자신이 호출 하고자 하는 method의 파라미터 type을 설정해 주고 실제 method 호출과 파라미터 전달은 method class의 invoke method를 이용해서 호출해 주면 된다.
'ººº::Development™:: > ::JAVA™::' 카테고리의 다른 글
[Java] jnlp.jar 찾기 (0) | 2008.10.20 |
---|---|
[JAVA] ANT 빌드 및 배포 (0) | 2008.07.29 |
[JAVA] 두 날짜를 입력받아 날짜의 차이를 구하기 (0) | 2008.07.14 |
[JAVA] 톰켓 스텍 사이즈 조절.. (0) | 2008.07.02 |
[JAVA] Java 기반 RIA 플랫폼으로서의 Swing++? (0) | 2008.06.24 |