프로그램/java

beanutil 을 이용하여 java object 의 property value 값 뽑아내기... 겁나 쉽다...

mulderu 2010. 5. 7. 23:09
이런거 공유의 대상인것 같습니다...
혹시, java의 vo 또는 dto 만들어서... 그쪽 처리하는 함수 많이 사용하시죠...
아마 대단히 많은 작업이 연관 되어 있을겁니다.. 저 같은 경우에는 dto의 내용을 jsp 에서 뿌려 주거나, 
dto의 내용의 일부 필드를 xml로 뽑아주는 작업이 많습니다.
그런경우 일일이 dto 안에서 xml로 뽑아주는 루틴을 넣었죠.. (일부 base class로 넘긴 부분은 있지만, 실질적으로
dto 내부에서 하는 작업이 계속 남아 있었습니다...)
그러나, 이런 부분을 한방에 해주는 open source library  (apache common beanutil)
가 있더군요, (저도 전에 대충 사용햇으나, 이번에는 피부로 느낌이 옵니다.)
아래가 대충 사용하는 예제입니다.  보시면 아... !!! 하시는 분들이 있다면 리플...





import java.lang.reflect.InvocationTargetException;

import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.WrapDynaBean;
import org.apache.commons.beanutils.WrapDynaClass;



/*
 *  
itemid
typea  
groupid
title  
writer 
regdate
content
param01
param02
param03
param04
param05

 */
public class TestBean  {
private String itemid = "";
private String typea = "";
private String groupid = "";
private String title = "";
private String writer = "";
private String regdate = "";
private String content = "";
private String param01 = "", param02 = "", param03 = "", param04 = "", param05 = "";
private int intval = 0;
private long longVal = 0;
private double floatVal = 0.0;
public static String[] attrs = {"itemid","typea","groupid","title","writer","regdate","content","param01","param02","param03","param04","param05"};
public int getIntval() {
return intval;
}
public void setIntval(int intval) {
this.intval = intval;
}
public long getLongVal() {
return longVal;
}
public void setLongVal(long longVal) {
this.longVal = longVal;
}
public double getFloatVal() {
return floatVal;
}
public void setFloatVal(double floatVal) {
this.floatVal = floatVal;
}
public String getItemid() {
return itemid;
}
public void setItemid(String itemid) {
this.itemid = itemid;
}
public String getTypea() {
return typea;
}
public void setTypea(String typea) {
this.typea = typea;
}
public String getGroupid() {
return groupid;
}
public void setGroupid(String groupid) {
this.groupid = groupid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getParam01() {
return param01;
}
public void setParam01(String param01) {
this.param01 = param01;
}
public String getParam02() {
return param02;
}
public void setParam02(String param02) {
this.param02 = param02;
}
public String getParam03() {
return param03;
}
public void setParam03(String param03) {
this.param03 = param03;
}
public String getParam04() {
return param04;
}
public void setParam04(String param04) {
this.param04 = param04;
}
public String getParam05() {
return param05;
}
public void setParam05(String param05) {
this.param05 = param05;
}
       // 원하는 property 리스트를 알경우 사용가능..
public void xxx() {
for(int i=0; i<attrs.length; i++) {
try {
System.out.println (attrs[i] +":"+ BeanUtils.getProperty(this, attrs[i]) );
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
      // 아무것도 모르는 빈의 프로퍼티들을 뽑으실때...
public String PropertiesValues() {
DynaBean dynaObject;
DynaClass dynaClass;

   DynaProperty[] properties;
dynaClass = WrapDynaClass.createDynaClass(this.getClass());
        properties = dynaClass.getDynaProperties();
        
        try
        {
            dynaObject = new WrapDynaBean(this);
            
            System.out
            .println("BeanUtils.getProperty ["+ properties.length +"]");
            
            for (int i = 0; i < properties.length; i++)
            {
                String key = properties[i].getName();
                
                
                try
                {
                 //BeanUtils.getSimpleProperty(bean, name)
                 //String x = BeanUtils.getProperty(this, key);
                 String x = BeanUtils.getSimpleProperty(this, key);
                    //BeanUtils.setProperty(baseObject, key, value);
                
                 System.out
                    .println("BeanUtils.getProperty ["+properties[i].getType().toString()+"]["+properties[i].isIndexed()+"]["+properties[i].isMapped()+"] : "+key+" :"
                            + x);
                
                } catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        } 
        catch (Exception e)
        {
            System.err
                    .println("FATAL ERROR: Unable to instantiate "
                            + dynaClass.getName());
            e.printStackTrace();
        }
        
// 아래는 그냥... 해본작업
StringBuffer sb = new StringBuffer();
sb.append("itemid  = " + itemid ); 
sb.append("typea   = " + typea  ); 
sb.append("groupid = " + groupid); 
sb.append("title   = " + title  ); 
sb.append("writer  = " + writer ); 
sb.append("regdate = " + regdate); 
sb.append("content = " + content); 
sb.append("param01 = " + param01); 
sb.append("param02 = " + param02); 
sb.append("param03 = " + param03); 
sb.append("param04 = " + param04); 
sb.append("param05 = " + param05); 

return sb.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestBean tb = new TestBean();
tb.setItemid("itemid.......");
tb.setTypea("typeaaaaaaaaaa");
//tb.xxx();
tb.PropertiesValues();
//System.out.println (tb.PropertiesValues());

}
}