黑马程序员技术交流社区
标题:
Java内省 求技术分
[打印本页]
作者:
pzfpang449
时间:
2013-1-23 17:42
标题:
Java内省 求技术分
操作JavaBean
1,getBeaninfo()获得BeanInfo.获得bean的所有属性
2,getPropertyDescriptors()获得属性的属性描述器
3,getReadMethod()获得属性的些方法
package com.itcast.introspector;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import org.junit.Test;
//使用内省api操作bean属性
public class neixingapi {
//得到Bean的所有属性
@Test
public void test() throws IntrospectionException{
BeanInfo info=Introspector.getBeanInfo(Person.class);
PropertyDescriptor[] pds= info.getPropertyDescriptors();
for(PropertyDescriptor pd:pds){
System.out.println(pd.getName());
}
}
//操作Bean的指定属性
@Test
public void test2() throws Exception{
Person p=new Person();
PropertyDescriptor pd=new PropertyDescriptor("age", Person.class);
//获得set属性public void setAge(int age) {
Method method=pd.getWriteMethod();
method.invoke(p, 45);
//获得get属性public int getAge() {
method=pd.getReadMethod();
System.out.println(method.invoke(p,null));
}
//获得属性的属性
@Test
public void test3()throws Exception{
Person p=new Person();
PropertyDescriptor pd=new PropertyDescriptor("age", Person.class);
System.out.println(pd.getPropertyType());
}
}
2,BeanUtils
1)使用Beanutils操作bean属性
BeanUtils.setProperty(p, "name", "aaa");
System.out.println(p.getName());
2)自定义转换器(例如日期)
ConvertUtils.register(new Converter(){},Date.class);
3)Apache自带的日期转换
ConvertUtils.register(new DateLocaleConverter(), Date.class);
4)将map数据放到bean中 用BeanUtils.populate()填充bean的属性
BeanUtils的例子如下
package com.itcast.beanutils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test;
//使用BeanUtils操作bean的属性
public class beanutilneixing {
@Test
public void test() throws Exception{
Person p=new Person();
BeanUtils.setProperty(p, "name", "aaa");
System.out.println(p.getName());
}
//自定义转换,下面代码有问题,因为beanutils框架只支持基本数据类型转换
@Test
public void test2()throws Exception{
String name="aa";
String password="123";
String age="11";
String birthday="1998-02-20";
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
// TODO Auto-generated method stub
if(value==null){
return null;
}
if(!(value instanceof String)){
throw new ConversionException("只支持String类型");
}
String str=(String) value;
if(str.trim().equals("")){
return null;
}
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
try {
return sf.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);//异常不能断
}
}
},Date.class);
Person p=new Person();
BeanUtils.setProperty(p, "name", name);
BeanUtils.setProperty(p, "password", password);
BeanUtils.setProperty(p, "age", age);
BeanUtils.setProperty(p, "birthday", birthday);
System.out.println(p.getName());
System.out.println(p.getPassword());
System.out.println(p.getAge());
System.out.println(p.getBirthday());
}
//Apache带的日期转换方法,有bug如果birthday为""时报错
@Test
public void test3()throws Exception{
String name="aa";
String password="123";
String age="11";
String birthday="1998-02-20";
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person p=new Person();
BeanUtils.setProperty(p, "name", name);
BeanUtils.setProperty(p, "password", password);
BeanUtils.setProperty(p, "age", age);
BeanUtils.setProperty(p, "birthday", birthday);
System.out.println(p.getName());
System.out.println(p.getPassword());
System.out.println(p.getAge());
System.out.println(p.getBirthday());
}
//将map数据放到bean中 用BeanUtils.populate()填充bean的属性
@Test
public void test4()throws Exception{
Map map=new HashMap();
map.put("name", "aa");
map.put("password", "123");
map.put("age", "23");
map.put("birthday", "1999-9-9");
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person bean=new Person();
//用map集合中的值,田中bean的属性
BeanUtils.populate(bean, map);
System.out.println(bean.getName());
System.out.println(bean.getPassword());
System.out.println(bean.getAge());
System.out.println(bean.getBirthday());
}
}
作者:
许庭洲
时间:
2013-1-24 12:57
值得学习ing!
作者:
金鑫
时间:
2013-1-24 15:17
单纯的分享是没有技术分的,只有金币奖励。建议楼主还是多多提问,以及回答别人问题,现在技术分已经很好得了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2