java的method反射机制(二)
来源:互联网 发布:网络侠客行txt全集下载 编辑:程序博客网 时间:2024/05/21 07:47
在java web 开发中,我们经常会遇到,从后台获取前台的值,将获取的值通过set方法赋值给实体,然后将实体存入数据库中,有时候对于实体属性多时,代码量很大(其实都是那些set方法),所以针对这点,我们可以通过method反射机制,写个通用的底层方法(对任何实体都有效),这样一来,我们就不用再去一个一个set到实体中去。
public static Object ObjectMethod(Object obj,HttpServletRequest request){
Field[] fields = obj.getClass().getDeclaredFields();
for(Field field:fields){
String md = "set"+StringUtils.capitalize(field.getName());
try {
Method method = obj.getClass().getDeclaredMethod(md, field.getType());
if("java.lang.String".equals(field.getType().getName())){
String value = request.getParameter(field.getName());
method.invoke(obj, value);
}else if("java.lang.Integer".equals(field.getType().getName())){
if(!"".equals(request.getParameter(field.getName()))&&request.getParameter(field.getName())!=null){
Integer value = Integer.valueOf(request.getParameter(field.getName()));
method.invoke(obj, value);
}
}else{//这里判断当实体中某个属性为对象类型时,再一次去反射
Class c = Class.forName(field.getType().getName());//获取属性所对应的实体类
Object o =c.newInstance(); //new一个实体类
Field[] fs = o.getClass().getDeclaredFields();
for(Field f : fs){
if(f.getName().endsWith("id")){//需要命名规范
String set = "set"+StringUtils.capitalize(f.getName());
Method m = o.getClass().getDeclaredMethod(set, f.getType());
if("java.lang.Integer".equals(f.getType().getName())){
Integer value = Integer.valueOf(request.getParameter(field.getName()));
m.invoke(o, value);
method.invoke(obj, o);
}else if("java.lang.String".equals(field.getType().getName())){
String value = request.getParameter(field.getName());
m.invoke(o, value);
method.invoke(obj, o);
}//今后添加基础类型
}
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (InstantiationException e) {
e.printStackTrace();
}
}
return obj;
}
以上两篇文章,是对java Method反射机制的一个认识,其实,我们在java web开发中,所用到的框架,hibernate,spring等,都是通过java method反射机制去写的,由于时间问题,我在这里就不准备用java method的反射机制去模拟 hibernate ,spring框架了,大家有兴趣的可以去自己研究,如果有什么问题,欢迎大家留言!
- java的method反射机制(二)
- java的method反射机制(一)
- Java反射机制-method
- Java 反射机制[Method反射]
- Java的反射机制(二)
- Java反射机制(二)
- java反射机制(二)
- Java反射机制(二)
- JAVA反射机制(二)
- Java进阶(极客)——反射机制(三)Method 对象的机制与实现
- java.lang.reflect.Method (java反射机制)
- java的反射Reflect机制之Method篇
- java反射机制 及 Method.invoke,Class. getMethod()的使用
- java反射机制 及 Method.invoke,Class. getMethod()的使用
- JAVA反射机制深入学习(二)实例演示JAVA反射机制的应用
- JAVA反射机制,get.method()/ Class.forName(className)
- Java反射机制知识点 (Class ,Field ,Method)
- java反射机制(二)
- 最简单的flex网络拓扑图开发(一)
- 解决Extjs分页工具条Ext.PagingToolbar无法换页问题
- 用shell脚本分析Nginx日志
- @常用的Linux操作@
- Oracle MAA 说明
- java的method反射机制(二)
- 乱码问题
- notepad++运行网页文件
- 如何使用kobold2d来做一个简单的iphone游戏教程(第五部分)
- Linux Kernel and Android 休眠与唤醒(中文版)
- 数据库连接大全
- 图片旋转、缩放、反转
- App Zap的非常货币化策略:付费游戏的应用内购买
- Debug与Release版本的区别