Difference between r1.10 and the current
@@ -1,12 +1,18 @@
= 설명 =
~java
/**
* just print "say Hello" string to console
public class HelloWorld {
public void sayHello() {
* 현재 프로젝트내의 클래스가 아닌 외부 패키지 클래스의 메소드를 호출하는 방법.
* 외부 프로젝트는 jar로 패키징 해야한다.
* classpath를 이용해 현재 프로젝트내의 class가 아닌 외부 패키지 class의 method를 호출하는 방법.
* 외부 프로젝트는 jar로 패키징 한다.
* jar파일에 존재하는 class를 현재 프로젝트에서 동적으로 호출할 수 있다.
* 프레임워크에서 많이 사용되는 방법이라고 한다.
* ORM(Object-Relational-MApping)이 아닌 방식으로 DAO를 만들 때 사용되기도 한다.
= 코드 = * 문자열을 출력하는 샘플 클래스.
{{{~java
/**
* just print "say Hello" string to console
*
* @author rabierre
*/public class HelloWorld {
public void sayHello() {
@@ -19,16 +25,24 @@
}
}
}}}
{{{
~java
/**
* call say HelloWorld class in external jar file package
public class TestReflection {
public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException {
URLClassLoader urlClassLoader = new URLClassLoader(
}
}}}
* jar파일로 패키징한다. (.java와 .class만 따로 패키징하는 방법은 [http://kldp.org/node/75924 여기])
{{{
jar cvf helloworld.jar
}}}
~java
/**
* call say HelloWorld class in external jar file package
*
* @author rabierre
*/public class TestReflection {
public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException {
ClassLoader classLoader = Test.class.getClassLoader();
ClassLoader classLoader = TestReflection .class.getClassLoader();
System.out.println(classLoader.getClass().getName());URLClassLoader urlClassLoader = new URLClassLoader(
설명 ¶
- classpath를 이용해 현재 프로젝트내의 class가 아닌 외부 패키지 class의 method를 호출하는 방법.
- 외부 프로젝트는 jar로 패키징 한다.
- jar파일에 존재하는 class를 현재 프로젝트에서 동적으로 호출할 수 있다.
- 프레임워크에서 많이 사용되는 방법이라고 한다.
- ORM(Object-Relational-MApping)이 아닌 방식으로 DAO를 만들 때 사용되기도 한다.
- 프레임워크에서 많이 사용되는 방법이라고 한다.
코드 ¶
- 문자열을 출력하는 샘플 클래스.
~java /** * just print "say Hello" string to console * * @author rabierre */ public class HelloWorld { public void sayHello() { System.out.println("say Hello"); } public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.sayHello(); } }
- jar파일로 패키징한다. (.java와 .class만 따로 패키징하는 방법은 여기)
jar cvf helloworld.jar
~java /** * call say HelloWorld class in external jar file package * * @author rabierre */ public class TestReflection { public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException { ClassLoader classLoader = TestReflection .class.getClassLoader(); System.out.println(classLoader.getClass().getName()); URLClassLoader urlClassLoader = new URLClassLoader( new URL[]{ new URL("file:/Users/fharenheit/Projects/openflamingo/helloworld.jar") }, classLoader ); System.out.println(Thread.currentThread().getContextClassLoader().getClass().getName()); Thread.currentThread().setContextClassLoader(urlClassLoader); System.out.println(Thread.currentThread().getContextClassLoader().getClass().getName()); Class<?> helloWorld = ClassUtils.getClass("HelloWorld"); Object object = helloWorld.newInstance(); Method[] declaredMethods = helloWorld.getDeclaredMethods(); for (int i = 0; i < declaredMethods.length; i++) { Method declaredMethod = declaredMethods[i]; System.out.println(declaredMethod.getName()); } Method sayHello = o.getClass().getMethod("sayHello", null); sayHello.invoke(object, null); } }