简化繁琐的赋值——反射在Jdbc和Struts中的应用
stmt.setLong(19, general.getYarn_repeat_height_uom_id());
stmt.setFloat(20, general.getYarn_repeat_width());
stmt.setLong(21, general.getYarn_repeat_width_uom_id());
stmt.setLong(22, general.getYarn_status_id());
stmt.setLong(23, general.getPrint_process_id());
stmt.execute();
例一
以上是关于针对Jdbc的赋值代码片断,让我们再看一个例子:
public int setFabricWebBaseData(DynaActionForm form, HttpServletRequest request, LE_FabricBean bean) {
bean.setFabric_no((String) form.get("txtID"));
bean.setBarcode_id((String) form.get("txtBarcodeID"));
bean.setStatus_id(TransformTools.getObjectInt((String) form.get("ddlStatus")));
bean.setMaterial_type_id(TransformTools.getObjectInt((String) form.get("ddlMaterialType")));
bean.setFabric_type_id(TransformTools.getObjectInt((String) form.get("ddlFabricType")));
bean.setFabric_end_use_id(TransformTools.getObjectInt((String) form.get("ddlEndUse")));
bean.setVendor_number((String) form.get("txtArticle"));
bean.setRegion_id(TransformTools.getObjectInt((String) form.get("ddlRegion")));
bean.setCountry_id(TransformTools.getObjectInt((String) form.get("ddlCountry")));
bean.setColor_range_id(TransformTools.getObjectInt((String) form.get("ddlColorRange")));
bean.setPattern_id(TransformTools.getObjectInt((String) form.get("ddlPattern")));
System.out.println("====================>>"+form.get("txtComments"));
bean.setDescription((String) form.get("txtDescription"));
bean.setDetail((String) form.get("txtComments"));
bean.setFormSet_id(TransformTools.getObjectString(request.getParameter("hidFormSetID")));
LIBImageManage.setImageData(request, bean);
return 0;
}
例二
很明显,这个例子是关于ActionForm与Javabean之间的赋值。
由上面两个例子,我们可以看到在Jdbc中、或Struts中,Javabean与数据源、Javabean与ActionForm之间的赋值是十分繁琐的,也带来了大量的代码冗余;特别是在一个实际的B/S构架的应用中,我们经常采用Struts+Jdbc的开发模式,这其中有大量的Javabean在Jdbc中与数据源之间来回赋值,Javabean与ActionForm之间的来回赋值,两者相加起来,代码的冗余量大得惊人,对程序员来说,进行这样的赋值,的确是枯燥而乏味的。
这么冗长的代码,我一眼看下去,就发现其实代码的结构都一样,都是从一个对象里面取值,再赋到另外一个对象里头去。这样,我的第一想法是做一个公用的方法,然后我们来进行for循环调用。再往下,我就傻眼了,因为不管是哪个类的取值或者赋值,他们的方法都不是一样的,如例一中,既有stmt.setString,又有stmt.setLong。这样,我们用常规的方法提取不出一个公用的方法来。
分析到这里,我感到一种进入死胡同的感觉。但不管怎么样,我能确定解决之道是一定要抽取出一个公用的方法来,然后通过for循环来调用该方法。可以确定,问题是怎么构造出这个公用的方法。
对于这个公用的方法,我们手头有的是:对象、对象的方法名、该方法的参数,而我们需要调用该方法。说的明确一些,是在运行期内调用对象的方法。这样,我们就心里有底了,Java的反射机制能解决该问题。
反射机制的片断回顾
现在我们来回顾一下Java的反射机制:
之所以说是片断回顾,因为我们不打算把整个Java的反射机制在这里陈述一遍,这不是本文的目的。
推荐文章 |
