public class ReflectMatch {
//封装属性
private Map<String,Field> fieldMap = new HashMap<String,Field();
//封装属性的set方法
private Map<String,Method> methMap=new HashMap<String,Method>();
/*c:为赋值对象,
*values为给属性要赋的值,put('m1',1);put('m2',2),m1、m2等为属性
*/
public void setValue(Object c,Map values){
try{
Field[] fields = c.getClass().getDeclaredFields();
Method[] methods = c.getClass().getDeclaredMethods();
for(Field field : fields){
String attri = field.getName();
fieldMap.put(attri.toLowerCase(), field);
for(Method method : methods){
String meth = method.getName();
//匹配set方法
if(meth != null
&& "set".equals(meth.substring(0, 3))
&& Modifier.isPublic(method.getModifiers())
&& ("set"+Character.toUpperCase(attri.charAt(0))+attri.substring(1)).equals(meth)){
methodMap.put(attri.toLowerCase(), method);
break;
}
}
}
//2、属性赋值
for(Iterator it = values.keySet().iterator();it.hasNext();){
String name = (String)it.next();
String value = (String)values.get(name);
if (value == null)
continue;
value = value.trim();
name = name.trim();
Field field = fieldMap.get(name.toLowerCase());
if(field == null) continue;
Method method = methodMap.get(name.toLowerCase());
if (method == null) continue;
fill(c,field,method,value);
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 将字符串值转换为合适的值填充到对象的指定域
* @param bean 被填充的java bean
* @param field 需要填充的域
* @param value 字符串值
*/
public static void fill(Object bean, Field field, Method method, String value){
if (value == null||"null".equalsIgnoreCase(value))
return;
try{
Object[] oo = new Object[1];
String type = field.getType().getName();
if ("java.lang.String".equals(type)){
oo[0] = value;
}else if ("java.lang.Integer".equals(type)){
if (value.length() > 0) oo[0] = Integer.valueOf(value);
}else if ("java.lang.Float".equals(type)){
if (value.length() > 0) oo[0] = Float.valueOf(value);
}else if ("java.lang.Double".equals(type)){
if (value.length() > 0) oo[0] = Double.valueOf(value);
}else if ("java.math.BigDecimal".equals(type)){
if (value.length() > 0) oo[0] = new BigDecimal(value);
}else if("java.util.Date".equals(type)){
if (value.length() > 0) oo[0] = DateTimeUtil.create(value, "yyyy-mm-dd hh:mi:ss").toDate();
}else if("java.sql.Timestamp".equals(type)){
if (value.length() > 0) oo[0] = DateTimeUtil.create(value, "yyyy-mm-dd hh:mi:ss").toTimestamp();
}else if ("java.lang.Boolean".equals(type)){
if (value.length() > 0) oo[0] = Boolean.valueOf(value);
}else if("java.lang.Long".equals(type)){
if(value.length() > 0) oo[0] = Long.valueOf(value);
}
method.invoke(bean, oo);
}catch(Exception e){
e.printStackTrace();
}
}
}
分享到:
相关推荐
1.通过Java反射机制获取JavaBean对象。 2.通过JavaBean全路径字符串获取JavaBean对象。 3.获取JavaBean注解信息
很多公司里面不会用到H 所以只需要用SS不用h 相反来说用jdbc实现H的功能。
使用 Java 反射封装 JavaBean <br> 说明:这个程序在没有使用Hiberante时挺有用的 需要一个数据库查询语句 对应的JavaBean的全名(现在是Class,原来Class.getName()) 返回List包含多个JavaBean
Servlet中对获取网页表单数据自动给JavaBean赋值的BeanUtil工具类 Servlet中对获取网页表单数据自动给JavaBean赋值的BeanUtil工具类
希望能给大家带来方便,也希望大家能多上传资料共同学些
java反射实现javabean转json实例代码.docx
使用java反射机制封装javabean 项目当中使用的一个通用的方法
java--基于Java的网上购物系统(JavaBean+Servlet+jsp) java--基于Java的网上购物系统(JavaBean+Servlet+jsp) java--基于Java的网上购物系统(JavaBean+Servlet+jsp) java--基于Java的网上购物系统(JavaBean+Servlet+...
找的例子,大概改了改,没怎么做封装,能用的用吧
Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作.docx
主要给大家介绍了关于基于Java反射的map自动装配JavaBean工具类设计的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起看看吧
Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图
Java 的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性。 运用JavaBean 的最常见的问题是:根据指定的类名,类字段名和所对应的数据,得到该类的实例,下面的例子演示了...
Java反射机制,原理实现,涵盖大部分函数,并有大量注解,方便理解
前台字符串赋值给JavaBean属性自动类型转换的实现(BeanUtils,ConverterConvertUtils三个类的使用)
java Map转换成bean,利用java反射以及java和bean包将map,Object>类型集合转换成需要的javaBean
通过java解析上传文件,判断文件类型(excel或者csv),将解析后的数据映射到javabean,从而可以进一步操作,入库或者增添数据
JAVA100例之实例88JavaBean连接数据库
基于标注和反射机制的通用JavaBean持久化工具类.pdf