JavaBean和内省

来源:互联网 发布:淘宝水印字体怎么设置 编辑:程序博客网 时间:2024/06/08 14:42

JavaBean

 

Bean的属性,字段对外提供了get或set方法那这个字段叫做属性,一个bean的属性不是由字段决定的,而是由get或set方法决定,只要有相对应的get或set方法就会有相对应的属性

 

内省

import java.beans.BeanInfo;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.lang.reflect.Method;

 

import org.junit.Test;

 

public class Demo1 {

    @Test

   public void test1() throws Exception {

      BeanInfo info =Introspector.getBeanInfo(Person.class,Object.class);

      PropertyDescriptor[] pds = info.getPropertyDescriptors();

      for (PropertyDescriptor ps : pds) {

          System.out.println(ps.getName());

      }

    }

   

   //操纵bean的指定属性:age

    @Test

   public void test2() throws Exception{

      Person p=new Person();

      PropertyDescriptor pd=newPropertyDescriptor("age",Person.class);

      //得到属性的写方法,为属性赋值

      Method method=pd.getWriteMethod();

      method.invoke(p, 45);

      

      //获取属性的值

      method=pd.getReadMethod();

      System.out.println(method.invoke(p,null));

    }

    @Test

   public void test3() throws Exception{

      Person p=new Person();

      PropertyDescriptor pd=newPropertyDescriptor("age",Person.class);

      System.out.println(pd.getPropertyType());

    }

}

 

 

 

 

 

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

 

importorg.apache.commons.beanutils.BeanUtils;

importorg.apache.commons.beanutils.ConversionException;

importorg.apache.commons.beanutils.ConvertUtils;

importorg.apache.commons.beanutils.Converter;

importorg.apache.commons.beanutils.locale.converters.DateLocaleConverter;

import org.junit.Test;

 

public class Demo1 {

    @Test

   public void test1() throws Exception{

      Person p=new Person();

      BeanUtils.setProperty(p," name", "nannan");

      

      System.out.println(BeanUtils.getProperty(p,"name"));

    }

   

   

   

   

   

    @Test

   public void test2() throws Exception,Exception{

      String birthday="1990-06-01";

      Person p=new Person();

      //为了让日期赋值到birthday属性上,我们给beanUtils注册一个日期转换器

      ConvertUtils.register(new Converter(){

 

          @Override

          public Object convert(Class type, Object value) {

             if(value==null){

                 return null;

             }

             if(!(value instanceof String)){

                 throw new ConversionException("只支持String类型的转换");

             }

             String str=(String)value;

             if(str.trim().equals(" ")){

                 return null;

             }

             SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");

             

             try {

                 return df.parse(str);

             } catch (ParseException e) {

                 throw new RuntimeException(e);//异常链不能断

             }

          }

 

      }, Date.class);

      //Date date=p.getBirthday();

      BeanUtils.setProperty(p, "birthday", birthday);

      Date date=p.getBirthday();

      

      System.out.println(date.toLocaleString());

    }

   

    @Test

   public void test3() throws Exception{

      String birthday="1990-06-01";

      ConvertUtils.register(new DateLocaleConverter(),Date.class);

      

      Person p=new Person();

      BeanUtils.setProperty(p, "birthday", birthday);

      System.out.println(p.getBirthday().toLocaleString());

      

    }

   

    @Test

   public void test4() throws Exception{

      Map map=new HashMap();

      map.put("name", "aaa");

      map.put("password","123" );

      map.put("birthday","1990-06-01");

      

      ConvertUtils.register(new DateLocaleConverter(),Date.class);

      Person bean=new Person();

      BeanUtils.populate(bean, map);//用map集合中的值填充bean的属性

      

      System.out.println(bean.getBirthday().toLocaleString());

      System.out.println(bean.getName());

      System.out.println(bean.getPassword());

    }

}

0 0