springのようなjava反射付与bean
この間springを使ってデータマッピングをしていましたが、どうして会社はこれらのフレームワークが好きではなく、いつも適用されません.の
私は崩壊して、javaもこのようないくつかの経典の枠組みで、他の人はすべてどのようにあなたが合わないことに適して、--冷静--
その後、xmlを解析するのが下手だったので、springの反射を参考にして、反射のツールクラスを書いて、xmlとして実体bean属性に反射しました.
コードを出して、考えているわけではありません.書いても何もありませんから.しかもspring resourceを見たことがないので、もっと上手かどうか分からないので、どこに書きたいですか.
下手ですが、よろしくお願いします.このうちgetDeclaredFieldメソッドでは親属性を取得できないため、getmethodメソッドで共通メソッドを取得するしかありません
私は崩壊して、javaもこのようないくつかの経典の枠組みで、他の人はすべてどのようにあなたが合わないことに適して、--冷静--
その後、xmlを解析するのが下手だったので、springの反射を参考にして、反射のツールクラスを書いて、xmlとして実体bean属性に反射しました.
コードを出して、考えているわけではありません.書いても何もありませんから.しかもspring resourceを見たことがないので、もっと上手かどうか分からないので、どこに書きたいですか.
package com.logi.lpromis.mapping.xml;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
public class XMLPropertyReflection
{
private static final Logger logger = Logger.getLogger(XMLPropertyReflection.class);
/**
*
* @param bean
* @param filename
* @return
* @throws Exception
*/
public static Object getProperty(Object bean,String filename) throws Exception
{
Class<? extends Object> beanClass = bean.getClass();
Field field = beanClass.getDeclaredField(filename);
field.setAccessible(true);
Object property = field.get(bean);//
return property;
}
/**
*
* @param bean
* @param filename
* @param filevalue
* @throws Exception
*/
// public static void setProperty(Object bean,String filename,String filevalue) throws Exception
// {
// try{
// Class<? extends Object> beanClass = bean.getClass();
// Field field = beanClass.getDeclaredField(filename);
// field.setAccessible(true);
// Object value = ConvertHandler(field.getType(),filevalue);//
// field.set(bean, value);//
// }
// catch (Exception e)
// {
// if(e instanceof NoSuchFieldException)
// {
// logger.error(" "+filename);
// logger.error(e);
// }
// else
// throw e;
// }
// }
/**
*
* @param type
* @param filevalue String
* @return
* @throws Exception
*/
public static Object ConvertHandler(Class<?> type,String filevalue) throws Exception
{
String typename = type.getName();
if(filevalue.getClass().getName().equals(typename))
return filevalue;//
else if("Boolean".equalsIgnoreCase(typename) || "java.lang.Boolean".equals(typename))
{
//boolean
if(filevalue.equalsIgnoreCase("true") || filevalue.equals("1"))
return new Boolean(true);
else
return new Boolean(false);
}
else if("int".equalsIgnoreCase(typename) || "Integer".equals(typename) || "java.lang.Integer".equals(typename))
return new Integer(filevalue);//int
else if("String".equalsIgnoreCase(typename) || "java.lang.String".equals(typename))
return new String(filevalue);//String
else
{
throw new Exception("xml "+typename+", XMLPropertyReflection ConvertHandler");// , XMLPropertyReflection ConvertHandler
}
}
/**
*
* @param bean
* @param filename
* @param filevalue
* @throws Exception
*/
public static void setProperty(Object bean,String fileName,String fileValue) throws Exception
{
try
{
Class<? extends Object> beanClass = bean.getClass();
// set
String fieldName = fileName.substring(0,1).toUpperCase()+fileName.substring(1);
String setFieldName = "set"+fieldName;// set
String getFieldName = "get"+fieldName;// get
Method getMethod = beanClass.getMethod(getFieldName);//
Class<?> propertyType = getMethod.getReturnType();//
Method setMethod = beanClass.getMethod(setFieldName,new Class[]{propertyType});
Object value = ConvertHandler(propertyType,fileValue);// value
setMethod.invoke(bean, new Object[]{value});
}
catch (Exception e)
{
if(e instanceof NoSuchMethodException)
{
logger.error(" " + fileName, e);
}
else
throw e;
}
}
public static void setProperty(Object object,Element ele) throws Exception
{
NamedNodeMap attributeMap = ele.getAttributes();
for (int i = 0; i < attributeMap.getLength(); i++)
{
Node cataNode = attributeMap.item(i);
XMLPropertyReflection.setProperty(object, cataNode.getNodeName(), cataNode.getNodeValue());
}
}
}
下手ですが、よろしくお願いします.このうちgetDeclaredFieldメソッドでは親属性を取得できないため、getmethodメソッドで共通メソッドを取得するしかありません