BeanUtils框架学习

package com.liang.Instopector;

import java.io.Serializable;
import java.util.Date;

public class Student implements Serializable {
	private String name="liang";
	private int age=21;
	private Date birthday;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

}

package com.liang.Instopector;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test;

public class Demo {
	//@Test
	public void test1() throws Exception{
		//获得指定的beanInfo对象
		BeanInfo beanInfo = Introspector.getBeanInfo(Student.class);
		//获得属性描述数组
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		//遍历:因为类继承Object类,Object类中有一个getClass()方法,所以个数会比你写的多一个
		System.out.println(pds.length);
		for(PropertyDescriptor pd:pds){
			System.out.print(pd.getName()+"  ");
		}
		System.out.println();
		//获得指定的PropertyDescriptor
		PropertyDescriptor pd=new PropertyDescriptor("name", Student.class);
		//获得get方法
		Method m=pd.getReadMethod();
		Student s=new Student();
		String str=(String)m.invoke(s, null);
		System.out.println(str);
		//获得set方法
		Method m1=pd.getWriteMethod();
		m1.invoke(s, "aaa");
		System.out.println(s.getName());
	}

	//@Test
	public void test2() throws Exception{
		Student s=new Student();

		//调用get方法:getProperty返回值是String,因为一切数据都是以String来显示的
		String age= BeanUtils.getProperty(s, "age");
		System.out.println(age);

		//调用set方法:
		//BeanUtils可以进行类型的自动转换,但仅限基本类型:本来需要int型,给个字符串,ok
		BeanUtils.setProperty(s, "name", "aaa");
		BeanUtils.setProperty(s, "age", "123");
		System.out.println("name:"+s.getName());
		System.out.println("age:"+s.getAge());
	}
	//非基本类型的属性设置
	//用户的输入都是String
	//String <----->其他类型间的互相转换
	//用户看到的结果都是String
	@Test
	public void test3() throws Exception{
		Student s=new Student();
		//为BeanUtils注册类型转换器:自定义转换器

		ConvertUtils.register(new Converter() {
			DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
			//type:目标类型
			//value:当前传入的值
			public Object convert(Class type, Object value) {
				if(value instanceof String){//字符串转Date
					String d=(String) value;
					java.util.Date date=null;
					try {
						date=df.parse(d);
					} catch (ParseException e) {
						e.printStackTrace();
					}
					return date;
				}else{//Date转换为字符串
					String date=df.format(value);
					return date;
				}
//				if(type.equals(Date.class)){
//					//字符串转换为Date
//				}else{
//					//Date转换为字符串
//				}
			}
		}, Date.class);
		BeanUtils.setProperty(s, "birthday", "2013-5-12");
		System.out.println(s.getBirthday());
	}
	//利用BeanUtils中写好的Date转换器
	@Test
	public void test4() throws Exception{
		Student s=new Student();
		ConvertUtils.register(new DateLocaleConverter(), Date.class);
		BeanUtils.setProperty(s, "birthday", "2014-10-3");
		System.out.println(s.getBirthday());
	}
}
时间: 2024-10-13 15:28:13

BeanUtils框架学习的相关文章

request请求参数的获取+BeanUtils框架--学习笔记

取得请求体相关的信息 a)request.getParameter(String):String b)request.getParameterValues(String):String[] 注意:在GET请求方式下,如果参数不一致,返回null,可能出现空指针异常 c)BeanUtils框架能够自动将String参数设置到JavaBean对象中(commons-beanutils-1.8.0.jar.commons-logging.jar) 1)无需理会参数的类型,个数,但是参数名一定要和Jav

javaweb 学习:BeanUtils框架/工具

3 BeanUtils框架/工具(APACHE开源组织开发)1)BeanUtils框架能够完成内省的一切功能,而且优化2)BeanUtils框架能够对String<->基本类型自动转化3)BeanUtils框架自定义转换器:ConvertUtils.register( 转换规则 ,目标对象的Class)4)向BeanUtils框架注册自定义转换器必须放在bu.setProperty()代码之前 5)使用BeanUtils内置String->Date的转换器:ConvertUtils.re

windows下scrapy框架学习笔记—&#39;scrapy&#39; 不是内部或外部命令

最近几天在深入的学习scrapy框架,但是装完各种需要的基础包之后却发现scrapy命令在别的路径下都用不了,我一开始是把python安装在F:\Python路径下的,安装了scrapy后它默认都会安装在这个路径下,scrapy在路径F:\Python\Scripts路径下,我的scrapy命令只能在此路径下用,因此创建什么工程也都只能在此文件下. 想了一下它的工作原理:它在F:\Python\Scripts路径下,就会在Scripts文件下存在一个scrapy批处理文件,那么在DOS下想要命令

Swagger框架学习分享

Swagger框架学习分享 转至元数据结尾 Created and last modified by 刘新宇 大约1分钟以前 转至元数据起始 一.背景介绍 1.1.项目简介 1.2.code repository 1.3.演示项目 二.开发准备 2.1.环境准备 2.2.项目搭建 2.2.1.jar仓库 2.2.2.相关依赖 2.2.3.编写配置文件 2.2.4.与swagger-ui集成 2.6.5.Controller配置 2.2.6.启动中间件 2.2.7.需求定制 三.学习感想 一.背景

某智能家居项目框架学习总结

这个月来第一篇博客,各种其他事情.. 之前负责过一个智能家居项目的二次开发,苏州一家公司做的,项目还是分了好几个系统,对业务流程的不同部分进行了划分,我是此项目的主要负责人,通过老师的指导,对这个项目也有了一些了解.此项目运用了一些框架,有些也是我第一次接触到的,下面将对项目用到的一些框架进行总结. 下面可能会出现几个有关智能家居的名词,介绍一下 1.机顶盒:每一个家庭都应该至少有一个机顶盒,控制电器开关都是由机顶盒向各电器的接收器发送命令 2.客户端:也就是用户的移动设备,手机.平板都可以,我

Spring框架学习之IOC(一)

Spring框架学习之IOC 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器.可单独使用,通常也与其他框架整合使用,例如SSH.SSM. IOC:控制反转 控制权由对象本身转向容器:由容器根据配置文件去创建实例并创建各个实例之间的依赖关系.等同于DI依赖注入 A

Android Afinal框架学习(一) FinalDb 数据库操作

框架地址:https://github.com/yangfuhai/afinal 对应源码: net.tsz.afinal.annotation.sqlite.* net.tsz.afinal.db.sqlite.* net.tsz.afinal.db.table.* net.tsz.afinal.utils.ClassUtils.net.tsz.afinal.utils.FieldUtils FinalDb 建库 FinalDb db = FinalDb.create(context, "my

spring框架学习(二)依赖注入

转自:http://blog.csdn.net/lishuangzhe7047/article/details/20740835 ———————————————————————————————————————————— spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入.接口注入不作要求,下面介绍前两种方式. 1,set注入 采用属性的set方法进行初始化,就成为set注入. 1)给普通字符类型赋值. [java] view plaincopyprint? pub

spring框架学习(一)

转自:http://blog.csdn.net/lishuangzhe7047/article/details/20740209 —————————————————————————————————————————————————— 1,什么是spring框架 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,ibatis框架等组合使用. 2,架构概述 1)IoC(Inversi