网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

简化繁琐的赋值——反射在Jdbc和Struts中的应用

http://www.diybl.com/ 2007-2-6  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】

                         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的反射机制在这里陈述一遍,这不是本文的目的。

文章整理:DIY部落 http://www.diybl.com (本站)   【点击打包该文章】
如果图片或页面不能正常显示请点击这里 站内搜索:   

文章评论

请您留言

 

最新新闻