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();
}
}
}
分享到:
相关推荐
对于后者,一种常见的做法是利用Java的反射机制来自动地将表单数据绑定到JavaBean对象上。 #### 反射简介 反射是Java提供的一种能够在运行时分析类的信息并操作类的成员(如方法、属性)的能力。通过反射,可以在...
工具类通过反射遍历JavaBean的所有公共属性,如果属性名与Map中的键匹配,就会调用对应的setter方法设置属性值。这样,我们只需要一行代码就能完成JavaBean的初始化,而无需手动写多个setter方法调用。 下面是一个...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以访问和修改私有成员,调用私有方法,创建对象,以及对类、接口、字段和方法进行操作,极大地...
- **具有无参构造函数**:这是JavaBean的基本要求之一,确保可以通过反射等机制创建JavaBean实例。 - **使用get/set方法访问其属性**:JavaBean的属性通常遵循JavaBeans规范,即通过get和set方法来访问和修改。 ...
JavaBean是一种特殊的Java类,它遵循一定的规范,用于封装数据并提供可重用的业务逻辑。在Java开发中,JavaBean被广泛应用于构建组件、数据传输以及MVC(Model-View-Controller)架构中的模型部分。这个压缩包文件...
listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的简单类 useArray1.java 用反射机制使用数组示例1 ...
- **反射操作**:它利用Java的反射机制,自动寻找JavaBean的属性并进行操作。 - **简化代码**:避免了繁琐的属性赋值过程,提高了代码的可读性和简洁性。 2. **使用BeanUtils工具包的操作步骤**: - **导入依赖*...
3. **反射操作**:BeanUtils库利用Java的反射机制,能够在运行时动态地调用JavaBean的getter和setter方法,增强了代码的灵活性。 4. **处理集合**:对于集合类型的属性,BeanUtils可以方便地进行迭代和批量操作,如...
- **反射机制**:该工具类大量使用了Java反射API(如`Introspector.getBeanInfo()`、`PropertyDescriptor`等)来获取和设置JavaBean的属性。 - **泛型**:使用了泛型`<T>`,使得该工具类可以应用于任意类型的...
当找到匹配的属性时,我们使用反射调用对应的setter方法,将表单域的值转化为与Bean属性类型一致的数据,并赋值给Bean的属性。这个过程中可能需要进行类型转换,例如将字符串转换为整数、日期等。 在Struts2的模型...
Struts依赖于框架内部的机制和约定,而反射则更底层,提供了更多的灵活性,但同时也需要更精细的控制和更高的代码复杂度。在实际开发中,根据项目需求和团队规范,选择合适的方法进行数据装填是非常重要的。
Apache Commons BeanUtils是Java开发中一个非常重要的工具库,它属于Apache Commons项目的一部分,旨在简化JavaBean对象的属性操作。在这个1.8.3版本的jar包中,包含了丰富的功能,使得开发者能够更加便捷地处理...
15.2 使用Java反射机制414 15.2.1 获取类型信息414 15.2.2 创建对象417 15.2.3 调用方法419 15.2.4 访问成员变量的值421 15.2.5 操作数组422 15.3 反射与动态代理424 15.3.1 静态代理424 15.3.2 动态代理426 15.4 本...
Java 10对垃圾回收机制进行了优化,提高了效率,特别是针对短生命周期对象的回收。 - **JShell命令行工具** JShell是一个交互式的Java shell工具,允许开发者在命令行中即时编写和测试代码片段,这对于快速原型...
开发者可以通过源码理解其内部机制,增强对Java反射和属性操作的理解;同时,可以直接使用jar包在项目中引入BeanUtils,提高开发效率。配合logging库,还能实现更完善的日志记录,为问题排查提供便利。
JavaBeanUtils是一个在Java开发中广泛应用的工具类库,主要由Apache Commons项目提供,用于简化对JavaBean属性的操作。在Java编程中,BeanUtils类扮演着重要的角色,极大地提高了开发者的工作效率。这个名为...
在Android开发中,XML是...总的来说,“xmlPares”为Android开发提供了一种便捷的XML解析方案,通过反射机制简化了XML数据到Java对象的映射过程,使得开发者可以更加专注于业务逻辑的实现,而不是繁琐的数据解析工作。
BeanUtils.jar主要包含了Apache Commons BeanUtils库,这是一个基于Java反射机制的工具库,它提供了对JavaBean属性的便捷访问和操作。通过这个库,开发者可以避免编写大量的getter和setter方法,提高代码的可读性和...
这个类库提供了许多实用方法,能够简化Java开发中的对象属性赋值和获取过程,极大地提高了开发效率。在Java后端开发中,尤其是在与数据库交互时,BeanUtils扮演了重要的角色。 首先,BeanUtils的核心功能在于属性的...
2. **反射操作(Reflection Utilities)**:BeanUtils库利用Java的反射API,能够动态地获取和设置JavaBean的属性。这意味着开发者无需预先知道对象的具体属性,只需要属性名称就能完成操作。 3. **类型转换(Type ...