검색결과 리스트
글
Java] java.lang.reflect.* 활용
*JSP 페이지로부터 form에 대한 값을 넘겨받아 useBean을 이용해서 값 저장
- jsp action 페이지에서 값을 저장후 reflect를 사용한 클래스 호출
<jsp:useBean id="vo" class="com.bbs.BbsVO">
<jsp:setProperty name="vo" property="*"/>
</jsp:useBean>
com.util.BeanExamer.survey(vo); // 자바클래스의 reflect를 이용한 클래스
* BeanExamer.java
package com.util;
import java.lang.ref.*;
import java.lang.reflect.*; // reflect를 사용하기 위한 import
import java.util.*;
public class BeanExamer {
public static void survey(Object obj){
Class clz = obj.getClass(); // 인자로 전달받은 vo객체를 통해 클래스를 얻어냄
Method[] methods = clz.getDeclaredMethods();
// 위에서 얻어낸 클래스를 통해 해당 클래스에 선언된 메소드들을 배열에 저장
ArrayList<Method> getMethods = new ArrayList<Method>(); // ArrayList에 메소드 타입으로 제너릭 설정
for(int i = 0; i < methods.length;i++){
/* 클래스에 선언된 메서드수만큼 loof를 시키고 get으로 시작하는 메서드만 ArrayList에 저장 */
if(methods[i].getName().startsWith("get") == true){
getMethods.add(methods[i]);
}
}
if(getMethods.size() <= 0){
return;
}
for(int i = 0; i < getMethods.size() ; i++){
Method m = getMethods.get(i);
try {
System.out.println(m.invoke(obj, null)); //invoke 메소드에 관한 내용은 아래내용을 참고
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
1.원형
Object invoke( Object obj, Object[] args )
2.사용
Class myclass = Class.forName( "package.name.MyClass" ); //특정 클래스의 클래스를 가져옴
Object myclassInstance = myclass.newInstance(); // 특정 클래스의 인스턴스 생성
Method[] methods = myclass.getMethods(); // 클래스의 메소드를 가져옴
// 메소드의 매개변수를 설정. 타입에 따라 Object 배열 초기화 코드의 내용이 틀려짐.
Object[] params = new Object[] { new Integer( value ) };
methods[0].invoke( myclassInstance, params ); //invoke함수는 클래스안에 메소드를 호출하게된다.
Method 클래스의 invoke 함수의 API 입니다. 보다시피 매개변수로 첫번째 메소드를 실행시킬 인스턴스나 클래스
를 넣어줘야 하고, 그 메소드의 매개변수를 Object 배열로 넣게 된다.
따라서 인트는 new Integer()로 감싸주거나 new BigDecimal()로 감싸주어 Object형으로 캐스팅 되게끔하고
String은 그 자체로서 Obejct형으로 캐스팅 되면서 Object[]배열로서 매겨변수로 들어가데 된다.
그러면 그 함수의 매개변수에 배열의 순서대로 넣어서 실행을 시킬수 있는것이다.
RECENT COMMENT