package test;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import entity.HelpTopicId;
public class TestMap
{
public static void restoreProp(Object bean, Map<String, Object> map)
{
BeanInfo beanInfo;
try
{
beanInfo = Introspector.getBeanInfo(bean.getClass());
PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : descriptors)
{
// 属性名字
String fieldName = propertyDescriptor.getName().toUpperCase();
String fieldType = propertyDescriptor.getPropertyType().getName();
if (map.containsKey(fieldName))
{
Method setter = propertyDescriptor.getWriteMethod();
if("java.lang.Short".equals(fieldType))
{
setter.invoke(bean, new Object[] { (Short.parseShort(map.get(fieldName)+"")) });
continue;
}
if("java.lang.Integer".equals(fieldType))
{
setter.invoke(bean, new Object[] { (Integer.parseInt(map.get(fieldName)+"")) });
continue;
}
setter.invoke(bean, new Object[] { map.get(fieldName) });
}
}
} catch (IntrospectionException e)
{
e.printStackTrace();
} catch (IllegalArgumentException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
} catch (InvocationTargetException e)
{
e.printStackTrace();
}
}
public static List<Map<String, Object>> readCSV(File file)
{
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
String msg = "";
int i = 0;
while ((msg = br.readLine()) != null)
{
String[] line = msg.split(",");
if (line == null || "".equals(line[0]))
{
break;
}
Map<String, Object> map = new HashMap<String, Object>();
if (i == 0)
{
for (int j = 0; j < line.length; j++)
{
line[j] = line[j].replaceAll("\"", "").replaceAll("_", "").toUpperCase();
if(j==0)
{
line[j]=line[j].substring(line[j].indexOf("H"), line[j].length());
}
map.put(j + "", line[j]);
}
list.add(map);
i++;
continue;
}
for (int k = 0; k < line.length; k++)
{
line[k] = line[k].replaceAll("\"", "");
map.put(list.get(0).get(k + "")+"", line[k]);
}
list.add(map);
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return list;
}
public static HashMap<String, Object> backupProp(Object bean)
{
HashMap<String, Object> result = new HashMap<String, Object>();
try
{
BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
PropertyDescriptor[] descriptors = beanInfo
.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : descriptors)
{
String fieldName = propertyDescriptor.getName();
Method getter = propertyDescriptor.getReadMethod();
Object fieldValue = getter.invoke(bean, new Object[] {});
System.out.println("bean 的属性名字:" + fieldName + " 属性值:"
+ fieldValue);
if (!fieldName.equalsIgnoreCase("class"))
{
result.put(fieldName, fieldValue);
}
}
} catch (IntrospectionException e)
{
e.printStackTrace();
} catch (IllegalArgumentException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
} catch (InvocationTargetException e)
{
e.printStackTrace();
}
return result;
}
public static void main(String[] args)
{
// BookAuthor author = new BookAuthor();
// author.setName("lx");
//
// Book book = new Book();
// book.setBookName("java");
// book.setPrice(22);
// book.setAuthor(author);
//
// backupProp(book);
List<Map<String, Object>> list = readCSV(new File("F:\\Documents and Settings\\Administrator\\桌面\\help_topic.csv"));
for(int i=1;i<list.size();i++)
{
HelpTopicId bean = new HelpTopicId();
restoreProp(bean, list.get(i));
System.out.println(bean.toString());
}
}
}
分享到:
相关推荐
自制工具,方便在两个Bean之间赋值,而且自动追加注释。 .netframework2下动作。
在这个案例中,我们将通过"通过set方法给bean赋值"来深入理解这一概念。 依赖注入可以通过三种方式实现:构造器注入、设值注入(通过setter方法)和接口注入。这里我们主要关注设值注入,因为它是最常见且直观的一...
本篇文章将深入探讨在Struts中FormBean的日期类型字段如何进行赋值以及自动转化。 一、FormBean的概念与作用 FormBean是Struts中的一种特殊Java类,用于封装HTTP请求中的参数。它们通常继承自`org.apache.struts....
### 利用反射实现JavaBean的自动赋值 在软件开发过程中,特别是在Web应用程序的开发中,经常会遇到需要将表单提交的数据绑定到JavaBean对象上的需求。这可以通过多种方式实现,例如使用Spring MVC等框架的自动绑定...
总结,通过bean的构造器赋值是Spring框架中实现依赖注入的有效手段,它有助于增强代码的可读性和可维护性,降低组件间的耦合度。在实际开发中,根据项目需求和设计原则灵活选择注入方式,可以更好地利用Spring的DI...
当找到匹配的属性时,我们使用反射调用对应的setter方法,将表单域的值转化为与Bean属性类型一致的数据,并赋值给Bean的属性。这个过程中可能需要进行类型转换,例如将字符串转换为整数、日期等。 在Struts2的模型...
- Bean的生命周期过程包括实例化、属性赋值、BeanNameAware和BeanFactoryAware接口方法调用、BeanPostProcessor接口方法调用、InitializingBean和DisposableBean接口方法调用等。 5. Spring的属性注入: Spring...
虽然这也成为自动注入的一种,但严格来讲,这种注入并不算是真正意义上的依赖注入,充其量算是一种初始化方式或赋值方式。 2. 注入其他 Bean 类型的属性。 如果一个 Bean 有另外一个 Bean 或者说类类型的成员变量...
而工具方面,有一些自动化工具可以帮助生成Java Bean类,如JSON to Java Bean在线转换器,可以输入JSON字符串自动生成对应的Java Bean源码,这样可以减少手动编码的工作。 在实际项目中,处理大量复杂JSON数据时,...
这使得它可以在Bean的生命周期中多个点进行干预,例如,在属性赋值之后修改属性值,这在Spring的自动注入和AOP实现中非常有用。 - BeanPostProcessor:这个接口允许在Bean初始化之前和之后进行扩展。它用于修改Bean...
当我们声明一个Bean并定义它的属性(如`id`)时,Spring会尝试自动装配这些属性。如果在配置文件或注解中指定了`setId`方法的参数,而实际传递的值类型不匹配,就会抛出这个异常。 错误信息“argument type ...
在Java Web开发中,我们经常需要将前端传来的字符串数据转换为JavaBean的属性,这一过程称为自动类型转换。在Spring框架中,`BeanUtils`、`Converter`和`ConvertUtils`是三个常用的工具类,它们帮助我们简化了这个...
但这在JSP中不常见,因为JSP容器通常会自动管理Bean的生命周期。 总结起来,Bean在JSP中的使用大大简化了数据管理和页面逻辑,提高了代码的模块化。通过创建Bean类,设置和获取属性,调用方法,以及管理Bean的生命...
在setBeanName()方法中,我们将传入的参数(Bean的配置id)赋值给了beanName实例变量。这样,我们就可以通过beanName实例变量来访问Bean的配置id。 现在,让我们来看一下测试类: ```java package lee; import ...
Spring框架的@Autowired注解可以自动将依赖注入到bean中,但这里我们讨论的是基于Servlet和纯Java的BeanUtils自动装配,它们在原理上是相似的,都是利用反射和内省来实现对象的初始化和属性赋值。 总结起来,`...
Spring的自动装配是依赖注入的一种形式,它允许Spring容器根据配置信息自动为bean的属性赋值。Spring提供了多种自动装配模式,如byName、byType、constructor、autodetect等。byName是根据属性名匹配bean的id,...
1.2 @Inject 由 javax.inject.Inject 提供,基于类型进行自动装配,如果需要按照名称进行转配,则需要配合使用 @Named。 @Inject @Named("beanName") private BeanType bean; 应用范围:变量、setter 方法和...
5. **使用`@Autowired`的`@Autowired(required = false)`**:设置为`false`表示该依赖不是必须的,Spring在找不到对应Bean时不会抛出异常,而是赋值为`null`,这样可以打破循环引用。 6. **使用`@Resource`注解**:...
通过`BeanUtilsBean`进行对象复制,我们可以减少手动赋值的繁琐工作,提高代码的可读性和可维护性。然而,需要注意的是,这种方法也存在一些潜在问题,比如可能会覆盖掉原本存在于目标对象中的值,或者在类型转换...