简化繁琐的赋值——反射在Jdbc和Struts中的应用
//首先我们判断属性名数组是否和字段位置一一对应,如果不是抛出违例。
if(propNames.length!=ports.length)
{
System.out.println(“input args wrong:the propNames’ length is not the same with the ports’ length!”);
Throw new ValueManagerException(“input args wrong:the propNames’ length is not the same with the ports’ length!”);
}
try
{
//对属性名数组进行循环
for(int i=0;i<fieldNames.length;i++)
{
//在下面的语句中,我们首先取得属性名propNames[i];再对Javabean对象o取得它的Class对象,o.getClass();最后通过Class对象取得属性名对应的属性。
Field f=o.getClass().getDeclaredField(propNames[i])
//我们通过属性取得该属性对应的类型的名称。
String type=f.getType().getName();
//下面的语句作为重点,我们做一个标记,在后面来陈述。
ValueSetter.valueToBean(type,Tools.getSetterName(propNames[i]),o,ValueGetter.getStmtValue(type,ports[i],stmt)); 语句一
}
}
catch(Exception e)
{
e.printStackTrace();
}
在上面的语句一中,
我们先看valueToBean方法的输入参数:
第一个参数,type是我们前面取得的属性的类型;
第二个参数,里面有一个getSetterName方法,显然是想取得属性名对应的set方法,我们来看Tools类里头的getSetterName方法,
public static String getSetterName(String propName)
{
return "set"+propName.substring(0,1).toUpperCase()+propName.substring(1,propName.length());
}
可以看出该方法的确是由属性名取得了该属性对应的set方法名;
第三个参数,o是对应的Javabean对象;
第四个参数,里头有一个getStmtValue方法,可以看出该方法是想取得stmt中对应位置的值,我们来看ValueGetter类中的getStmtValue方法的实现:
public static String getStmtValue(String type,int port, OracleCallableStatement stmt)
{
try
{
if(type.equals("java.lang.String"))
{
return stmt.getString(port);
}
else if(type.equals("int"))
{
return String.valueOf(stmt.getInt(port));
}
else if(type.equals("long"))
{
return String.valueOf(stmt.getLong(port));
}
else if(type.equals("float"))
{
return String.valueOf(stmt.getFloat(port));
}
else
{
&nbs
推荐文章 |
