JAVA 中从应用场景中来总结反射的使用
来源:互联网 发布:office mac 威锋 编辑:程序博客网 时间:2024/06/08 14:37
第一:最最常见的是使用反射来get,set;
我们常用的框架:spring mvc,structs,hibernate中就有对反射的很好应用;这里最主要的是把请求中的参数,set进实体中。直接通过实体去调用参数。或者在做保存的时候,使用hibernate可以直接save,或者update进数据库。但是直接update进数据库这里会出现一些问题:会覆盖原有的数据库中存在的数据。最规范的更新是先get,后update;
框架之所以为框架是因为其简化了我们写代码,让那些重复的代码消失。我们如果不使用框架的话,我们从前台拿请求参数,是使用request.getParameter("");如果表单有很多个,譬如说100个,难道还是去写100句吗?这肯定是不好的。所以如果我不用框架,我会自己封装一个方法,来达到将request中的请求中的参数set进我要的实体类。我还要让这个方法对所有的实体类都是有效的,那么就得配合泛型来写了。
这里先写写思路:
1.通过类,拿到这个的所有属性(包括父类),形成一个数组arr[]
2然后写一个根据字段生成的set方法;
3.循环遍历数组,通过request.getParameter("arr[i]") 获取请求传来的值;
4.通过反射将3得到的数据set进方法中。
这样一个类似于spring mvc,或者struts的set进实体的功能便实现了。数据库set进实体类也是同样的原理。
实例代码:
public static <T> void getInfor(T t, HttpServletRequest request) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{Method father[]=t.getClass().getGenericSuperclass().getClass().getMethods(); //取父亲类的方法Method son[]=t.getClass().getDeclaredMethods(); //取当前方法Method[] methods=ArrayUtils.addAll(father,son); //合并方法 Field sonFil[]=t.getClass().getFields(); //当前类字段Field fatherFil[]=t.getClass().getGenericSuperclass().getClass().getFields(); //父类字段Field[] field=ArrayUtils.addAll(fatherFil,sonFil); //合并for(int j=0;j<methods.length;j++) //遍历方法{for(int i=0;i<field.length;i++) {if(methods[j].getName().equals(getFirstCharacterToUpper(field[i].getName()))) //如果方法名称与字段生成的方法名称一样,则从request中拿到值,并且设置值{methods[j].invoke(t,request.getParameterValues(field[i].getName())); //反射设置值break;}}}}/*根据字段获得它的set方法*/private static String getFirstCharacterToUpper(String srcStr) {String setMethod = "set" + StringUtils.capitalize(srcStr); // 首字母大写return setMethod;}
第二:动态生成表单时,需要从后台把表单的验证规则也带到前台:这里会出现一个问题,就是动态生成表单的name不可以以静态的表单的naem相同,否则动态生成的表单
提交数据,会与原有表单出现冲突。所以得验证表单名称的唯一性。假设我们的表单是录入进数据库,然后根据类别去拿表单。那么载入进数据库的时候就得验证表单的name是不可以和原有的类中的属性同名。所以这里需要根据类的名称去拿该类下的所有属性,然后作对比。
- JAVA 中从应用场景中来总结反射的使用
- Android 中java反射应用(三)——应用场景及总结
- java 浅谈反射在实际场景中应用
- java 中反射的应用
- javascript中this使用场景的总结
- java中反射总结
- JAVA反射机制的应用场景
- JAVA反射机制的应用场景
- JAVA中代理与反射的应用
- JAVA中反射机制的应用
- 黑马程序员 Java中反射的应用
- Java中反射机制的应用
- java中反射的应用类
- Android中java反射的应用
- Java中反射(Reflection)的应用
- Java中反射(Reflection)的应用
- java中观察者模式的使用场景
- java反射使用场景
- caffe中样本的label一定要从序号0开始标注--caffe学习(15)
- 触发器-----SQLserver出现自启动触发器
- Java LineNumberReader
- Vue.extend和Vue.component的区别
- Markup, mark down
- JAVA 中从应用场景中来总结反射的使用
- Android6.0运行时权限回调不执行的手机
- Java SequenceInputStream 序列流
- UE4 C++ 添加头文件
- 教你怎么找到spring下载地址
- git学习--githug1-20关
- Java泛型-类型擦除
- 微信开发那点事
- Java ByteArrayOutputStream 内存输出流