`

根据指定的类名以及属性字符串名值对构建指定的bean实例

    博客分类:
  • Code
阅读更多
主要是反射(基本类型)的一些用法.很少用, 容易忘记, 备忘一下
public class TestUtils {
	/**
	 * 根据指定的类名以及属性字符串名值对构建指定的bean实例.
	 * @param <T>
	 * @param clazz
	 * @param str 形如"includeSkus=true,spuId=143944,queryOrder=desc,startsMin=2009-07-24 12:08:46"这样的字符串
	 * @return
	 * @throws Exception
	 */
	public static <T> T createBean(Class<T> clazz, String str) throws Exception{
		T bean = clazz.newInstance();
		String[] properties = StringUtils.split(str, ",");
		if (properties == null || properties.length == 0) {
			return bean;
		}
		

		for (String property : properties) {
			String[] pair = StringUtils.split(property, "=");
			if (pair.length != 2) {
				continue;
			}
			String name = pair[0];
			String value = pair[1];
            if (StringUtils.equals(value, "null")) {
                continue;
            }

			Class<?> type = PropertyUtils.getPropertyType(bean, name);
			Object realValue = null;
			// 目前只支持字符串, boolean, 日期, 数字(long, int等)
            if (type == null) {
                continue;
            }

			if (type == String.class) {
				realValue = value;
			}else if (type.isPrimitive() && type == Boolean.TYPE){
				realValue = Boolean.valueOf(value);
			}else if (Date.class.isAssignableFrom(type)){
				realValue = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(value);
			}else if (Number.class.isAssignableFrom(type)) {
				realValue = type.getConstructor(String.class).newInstance(value);
			}else if (type.isPrimitive()){
				if (type == Long.TYPE ) {
					realValue = Long.valueOf(value);
				}else if (type == Integer.TYPE ) {
					realValue = Integer.valueOf(value);
				}else if (type == Float.TYPE) {
					realValue = Float.valueOf(value);					
				}else if (type == Short.TYPE) {
					realValue = Short.valueOf(value);					
				}else if (type == Double.TYPE) {
					realValue = Double.valueOf(value);					
				}else {
					continue;
				}
			}else {
				continue;
			}
			
			PropertyUtils.setProperty(bean, name, realValue);
			
		}
		
		return bean;
	}
	
	@Test
	public void testBeanPropertyUtils() throws Exception{
		TempBean bean = createBean(TempBean.class, "id=1234,includeSkus=true,spuId=143944,queryOrder=desc,startsMin=2009-07-24 12:08:46");
		Assert.assertTrue(bean.isIncludeSkus());
		Assert.assertEquals(bean.getId(), 1234L);
		Assert.assertEquals(bean.getSpuId(), (Long)143944L);
		Assert.assertEquals(bean.getQueryOrder(), "desc");
		Assert.assertEquals(bean.getStartsMin(), new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2009-07-24 12:08:46"));
	}
}
分享到:
评论
1 楼 osacar 2012-02-10  
是啊,我也要标记一下,我也忘了

相关推荐

    将对象(java bean)转换为xml字符串

    在Java开发中,有时我们需要将Java Bean对象转换成XML字符串,以便于数据交换或存储。XStream库就是这样一个工具,它提供了一种简单且高效的方式来实现这个目标。XStream不仅能够将Java对象转换为XML,还可以反向将...

    bean运行时跟综实例-TOSTRING

    当BEAN对象被转换为字符串时,能够清晰地显示其内部属性的值,有助于快速理解和分析对象的状态。 例如,我们可以看到压缩包中的`BasePo.java`和`TOperParamInfo.java`这两个文件,它们可能分别代表了一个基础的持久...

    【框架源码篇 04】Spring源码手写篇-Bean定义配置化

    Bean的类名则指定了Bean的实现类,Spring将根据这个类名创建Bean实例。 其次,Bean的初始化方法和销毁方法允许我们自定义Bean的生命周期。初始化方法在Bean创建后且所有依赖注入完成之前调用,而销毁方法在Bean被...

    为了高效地将Json对象转化成Java bean对象,传统上我们是在运行是利用反射来实现.zip

    这需要确保JSON键与Java Bean的属性名匹配,或者使用注解来指定映射关系。 5. **处理嵌套结构**:如果JSON包含嵌套的对象或数组,我们需要递归地执行上述步骤,将嵌套的JSON对象转化为相应的Java Bean或List/Array...

    spring_xml.zip

    `id`属性是bean的唯一标识,`class`属性指定bean的全限定类名。 2. `&lt;property&gt;`元素:用于设置bean的属性值。`name`属性对应于bean类中setter方法的无参数方法名(去掉set前缀并小写首字母),`ref`属性用于引用另...

    spring 5.2.9 07 源码分析-spring的bean工厂准备工作 测试用例

    在这里,`#{}`是Spring EL(Expression Language)表达式,`setText()`方法会返回一个字符串值,用于设置`message`属性。 测试用例在源码分析中起到验证和调试的作用。在Spring框架中,我们通常使用`...

    JSF2-Annotations.pdf

    - **默认映射规则**:如果Action Controller方法返回一个字符串,则该字符串通常被视为视图ID,JSF会尝试加载该视图;如果返回null,则通常表示执行某些后处理操作而不导航到其他页面。 #### 自定义Bean名称 除了...

    Spring中xml的配置[定义].pdf

    它允许你在配置中传递bean的引用,而不是直接写入bean的ID字符串。这提供了错误检查的功能,因为Spring容器会在启动时验证所引用的bean是否存在。使用`local`属性时,如果引用的bean在同一XML文件中,解析器可以立即...

    Spring_ClassPathResource获得bean对象

    创建ClassPathResource实例时,你需要提供一个字符串参数,这个字符串是相对于类路径的资源路径。例如,如果你有一个名为`beans.xml`的配置文件位于`com/example/config`包下,你可以这样创建: ```java Class...

    xstream 1.3.1.jar bean对象转换为xml

    3. **转换Bean对象**:有了XStream实例后,你可以将Java Bean对象转换为XML字符串。 ```java MyBean myBean = new MyBean(); // 假设MyBean是一个Java Bean String xml = xstream.toXML(myBean); ``` 4. **输出...

    Spring 配置文件 和详细笔记

    - **属性值**:`&lt;value&gt;`元素用于直接注入字符串值。 - **环境变量和系统属性**:使用`${...}`引用系统属性或环境变量,例如`${java.home}`。 - **属性文件**:使用`...

    JAVABEAN方法实例

    这个“JAVABEAN方法实例”显然是一个教学实验,通过JavaBean方法来查找并确定一个字符串在另一个字符串中的位置。 首先,我们需要了解JavaBean的基本规范: 1. 类通常是公共的(public)。 2. 至少有一个无参数的...

    模拟spring中的ClassPathXmlApplicationContext类的实现

    这些路径可以是相对于类路径的字符串。例如,`new ClassPathXmlApplicationContext("beans.xml")`。 2. **读取配置文件**:在内部,`ClassPathXmlApplicationContext`使用`Resource`接口从类路径中获取XML配置文件...

    JavaBean及内省文档

    - `value`:设置属性的值,可以是字符串或表达式。 ##### 3. `&lt;jsp:getProperty&gt;` 标签 此标签用于获取 JavaBean 对象的属性值。 - **语法格式**: ```xml &lt;jsp:getProperty name="beanName" property=...

    userBean标签的使用

    - `value`属性指定要设置给属性的值,这个值可以是一个具体的字符串常量。 - `param`属性指定一个请求参数,当请求中包含该参数时,会自动将参数值设置到指定的属性中。注意,`param`属性和`value`属性不能同时使用...

    spring配置文件模板

    `name`属性的值`Example`则是通过setter方法设置到Bean实例上的。 Bean的依赖注入是通过`&lt;property&gt;`标签实现的,如上例所示。Spring支持多种类型的注入,包括属性值注入、构造器注入、集合注入等。属性值注入是最...

    Spring环境搭建

    例如,你可以使用`&lt;bean&gt;`标签来声明一个bean,并通过`&lt;property&gt;`子标签指定属性的值或者通过`&lt;ref&gt;`标签引用其他bean。 属性编辑器在Spring中扮演着重要角色,它可以将配置文件中的字符串转换为对应的对象。...

    tiny-spring-step-4-config-beanfactory-with-xml.zip

    `&lt;bean&gt;`元素则用来定义一个Bean,`id`属性用于唯一标识Bean,`class`属性指定了Bean的全限定类名。`&lt;property&gt;`元素用于设置Bean的属性值。 四、Bean的实例化与初始化 当Spring容器加载XML配置文件后,会根据`...

    Ioc注入讲解

    - **文本类型**:包括原始数据类型(如String)以及需要转换的数据类型(如将字符串“5”转换为Integer)。 - **Class类型**:通过反射的方式实例化一个类。 - **引用类型**:通过容器中的ID来获取另一个Bean的实例...

    struts2基本标签用法

    `name`属性指定了Bean的类名,`id`属性则为创建的Bean实例赋予了一个唯一标识,方便后续使用。 ### 7. 日期格式化 对于日期时间的格式化显示,Struts2提供了`&lt;s:date&gt;`标签。 ```xml ``` `format`属性用于指定...

Global site tag (gtag.js) - Google Analytics