`
liuguly
  • 浏览: 10234 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Bean自动赋值

 
阅读更多
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之间赋值工具

    自制工具,方便在两个Bean之间赋值,而且自动追加注释。 .netframework2下动作。

    通过set方法给bean赋值.zip

    在这个案例中,我们将通过"通过set方法给bean赋值"来深入理解这一概念。 依赖注入可以通过三种方式实现:构造器注入、设值注入(通过setter方法)和接口注入。这里我们主要关注设值注入,因为它是最常见且直观的一...

    Struts中FormBean的日期类型字段赋值自动转化

    本篇文章将深入探讨在Struts中FormBean的日期类型字段如何进行赋值以及自动转化。 一、FormBean的概念与作用 FormBean是Struts中的一种特殊Java类,用于封装HTTP请求中的参数。它们通常继承自`org.apache.struts....

    利用反射实现JavaBean 的自动赋值

    ### 利用反射实现JavaBean的自动赋值 在软件开发过程中,特别是在Web应用程序的开发中,经常会遇到需要将表单提交的数据绑定到JavaBean对象上的需求。这可以通过多种方式实现,例如使用Spring MVC等框架的自动绑定...

    通过bean的构造器赋值.zip

    总结,通过bean的构造器赋值是Spring框架中实现依赖注入的有效手段,它有助于增强代码的可读性和可维护性,降低组件间的耦合度。在实际开发中,根据项目需求和设计原则灵活选择注入方式,可以更好地利用Spring的DI...

    java bean 与 Web Form表单如何实现自动装配

    当找到匹配的属性时,我们使用反射调用对应的setter方法,将表单域的值转化为与Bean属性类型一致的数据,并赋值给Bean的属性。这个过程中可能需要进行类型转换,例如将字符串转换为整数、日期等。 在Struts2的模型...

    Spring bean 管理

    - Bean的生命周期过程包括实例化、属性赋值、BeanNameAware和BeanFactoryAware接口方法调用、BeanPostProcessor接口方法调用、InitializingBean和DisposableBean接口方法调用等。 5. Spring的属性注入: Spring...

    在Spring中自动装配Bean的属性

    虽然这也成为自动注入的一种,但严格来讲,这种注入并不算是真正意义上的依赖注入,充其量算是一种初始化方式或赋值方式。 2. 注入其他 Bean 类型的属性。 如果一个 Bean 有另外一个 Bean 或者说类类型的成员变量...

    json和bean转换

    而工具方面,有一些自动化工具可以帮助生成Java Bean类,如JSON to Java Bean在线转换器,可以输入JSON字符串自动生成对应的Java Bean源码,这样可以减少手动编码的工作。 在实际项目中,处理大量复杂JSON数据时,...

    Spring Bean生命周期.pdf

    这使得它可以在Bean的生命周期中多个点进行干预,例如,在属性赋值之后修改属性值,这在Spring的自动注入和AOP实现中非常有用。 - BeanPostProcessor:这个接口允许在Bean初始化之前和之后进行扩展。它用于修改Bean...

    Cannot invoke setId on bean class 'class ' - argument type mismatch - had object

    当我们声明一个Bean并定义它的属性(如`id`)时,Spring会尝试自动装配这些属性。如果在配置文件或注解中指定了`setId`方法的参数,而实际传递的值类型不匹配,就会抛出这个异常。 错误信息“argument type ...

    前台字符串赋值给JavaBean属性自动类型转换

    在Java Web开发中,我们经常需要将前端传来的字符串数据转换为JavaBean的属性,这一过程称为自动类型转换。在Spring框架中,`BeanUtils`、`Converter`和`ConvertUtils`是三个常用的工具类,它们帮助我们简化了这个...

    bean的使用

    但这在JSP中不常见,因为JSP容器通常会自动管理Bean的生命周期。 总结起来,Bean在JSP中的使用大大简化了数据管理和页面逻辑,提高了代码的模块化。通过创建Bean类,设置和获取属性,调用方法,以及管理Bean的生命...

    Spring实战之获得Bean本身的id操作示例

    在setBeanName()方法中,我们将传入的参数(Bean的配置id)赋值给了beanName实例变量。这样,我们就可以通过beanName实例变量来访问Bean的配置id。 现在,让我们来看一下测试类: ```java package lee; import ...

    自动装配Beanutils.zip

    Spring框架的@Autowired注解可以自动将依赖注入到bean中,但这里我们讨论的是基于Servlet和纯Java的BeanUtils自动装配,它们在原理上是相似的,都是利用反射和内省来实现对象的初始化和属性赋值。 总结起来,`...

    第五章 Spring4 自动装配、方法注入

    Spring的自动装配是依赖注入的一种形式,它允许Spring容器根据配置信息自动为bean的属性赋值。Spring提供了多种自动装配模式,如byName、byType、constructor、autodetect等。byName是根据属性名匹配bean的id,...

    Spring中如何动态注入Bean实例教程

    1.2 @Inject 由 javax.inject.Inject 提供,基于类型进行自动装配,如果需要按照名称进行转配,则需要配合使用 @Named。 @Inject @Named("beanName") private BeanType bean; 应用范围:变量、setter 方法和...

    简单了解spring bean的循环引用

    5. **使用`@Autowired`的`@Autowired(required = false)`**:设置为`false`表示该依赖不是必须的,Spring在找不到对应Bean时不会抛出异常,而是赋值为`null`,这样可以打破循环引用。 6. **使用`@Resource`注解**:...

    BeanUtilsBean对象复制使用(类型可以自动转化)

    通过`BeanUtilsBean`进行对象复制,我们可以减少手动赋值的繁琐工作,提高代码的可读性和可维护性。然而,需要注意的是,这种方法也存在一些潜在问题,比如可能会覆盖掉原本存在于目标对象中的值,或者在类型转换...

Global site tag (gtag.js) - Google Analytics