관리 메뉴

IT.FARMER

java reflect private 접근 하기 본문

JAVA

java reflect private 접근 하기

아이티.파머 2010. 9. 13. 16:07
반응형
* java.lang.reflect

ibatis를  쓸려다보니 resultMapping을 할때마다 하나하나 써줘야 하는 번거로움을 찾다보니,
작성된 Model Class로 뭔가 만들어보면 좋치 않을까해서 찾다보니

reflection 이 있더라.
이것도 입맞에 맞게 사용 할 수 있는 방법이 여러가지인것같다.
결론부터 말하자면.

field.setAccessible(true);

true로 주면 이상없이 접근 가능.(학교 선배가 알려줘서 쉬웠다 하핳핳)

자 그럼 통으로 적어볼까,

public class MappingItem {
 public static void main(String []args){
LoginDTO logdto = new LoginDTO();
Class cls = logdto.getClass();
List<String> fieldname = new ArrayList<String>();
  for(Field f:cls.getDeclaredFields()){
   fieldname.add(f.getName());
  }
  for(String name : fieldname){
   System.out.println(name);
  }
 }
}
위내용은 접근하기보다는, 선언된 Field Name 가져오기, 이걸 하다가 알아낸거 하나더,

* setAccessible(true)로 선언하고 field값에 접근하기.

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import com.hynix.ecms.login.model.LoginDTO;

/**
 *
 * @author ahn
 *
 */

public class MappingItem {
@SuppressWarnings("unchecked")
 public static void main(String []args){
  LoginDTO logdto = new LoginDTO();
  Class cls = logdto.getClass();
  List<String> fieldname = new ArrayList<String>();
  for (Field f : cls.getDeclaredFields()) {
   fieldname.add(f.getName());
  }
  for (String name : fieldname) {
   System.out.println("field Name: " + name);
  }
  
  Field field = null;
  
  try {
   field = cls.getDeclaredField("code");
  } catch (SecurityException e) {
   e.printStackTrace();
  } catch (NoSuchFieldException e) {
   e.printStackTrace();
  }
  
  System.out.println("code Information :" + field);
  System.out.println("field.getName() :" + field.getName());
  System.out.println("code toString():" + field.toString());
  System.out.println("old code Value :" + logdto.getCode());
  
  /*
   * private 로 선언 되어 있더라도 접근 가능 하도록 ...True
   */
  field.setAccessible(true);
 
  try {
   field.set(logdto, "hahahaha");
  } catch (IllegalArgumentException e1) {
   e1.printStackTrace();
  } catch (IllegalAccessException e1) {
   e1.printStackTrace();
  }
  
  try {
   System.out.println("field.get(code)" + field.get(logdto));
  } catch (IllegalArgumentException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  }
  
  System.out.println("new code Value:" + logdto.getCode());
 }
}


  






  

반응형

'JAVA' 카테고리의 다른 글

java component reference site  (0) 2011.03.31
Date toString() reverse Date()  (0) 2010.12.02
JAVA Super Class , Overriding  (0) 2010.09.08
파일 입출력  (0) 2010.08.23
(기타)톰켓 + 다이니믹 웹  (0) 2010.08.23