您的位置:首页 > 职场人生

黑马程序员Java培训和Android培训:JavaBean

2011-08-04 09:15 423 查看
 
(1)JavaBean是一种特殊的Java类,主要用于传递数据信息,JavaBean中的方法主要用于访问私有的字段,且方法名符合某种命名规则,举例如下: getAge()方法:Int getAge(){ }无参setAger()方法:void setAger(){}有参,其属性为age,属性名的命名:去掉set后,第二个字母为小写时,属性要小写,相反:如setCPU,属性为CPU,大写。
(2)一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用会更方便,JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。
(3)如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,JavaBean的实例对象通常称为值对象(Value Object,简称VO,一般不传递方法)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。
(4)beanutils工具包,Apache组织开发的
编程实例及笔记:
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
 
//import org.apache.commons.beanutils.BeanUtils;
//import org.apache.commons.beanutils.PropertyUtils;
 
public class neixing {
 
      public static void main(String[] args) throws Exception {
           Fanshefile pt1 = new Fanshefile(3,5);
           String propertyName = "x";
           //"x"-->"X"-->"getX"-->MethodGetX-->
           //获得某属性的值
           Object retVal = getProperty(pt1, propertyName);
           System.out.println(retVal);
          
           Object value = 7;
           setProperties(pt1, propertyName, value);
 
           //得到属性getProperty()  相当于getX()方法  BeanUtils返回值为String
           System.out.println(BeanUtils.getProperty(pt1, "x").getClass().getName());
           //相当于seiX()方法  BeanUtils返回值为String
           BeanUtils.setProperty(pt1, "x", "9");
           System.out.println(pt1.getX());
           /*
           //java7的新特性         javabean和Map可以相互转换的
           Map map = {name:"zxx",age:18};
           BeanUtils.setProperty(map, "name", "lhm");
           */
          
           //birthday.time set值
           BeanUtils.setProperty(pt1, "birthday.time", "111");
           //get值
           System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
          
           //setProperty() 里面的值为整数
           PropertyUtils.setProperty(pt1, "x", 9);
           //getProperty 得到的是一个整数 按其本身的类型进行操作,与BeanUtils不一样
           System.out.println(PropertyUtils.getProperty(pt1, "x").getClass().getName());
      }
 
      private static void setProperties(Object pt1, String propertyName,
                 Object value) throws IntrospectionException,
                 IllegalAccessException, InvocationTargetException {
           //把pt1.pt1.getClass()看成是一个javabean类型的类
           PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
           //javabean 类型里面有get和set方法,getWriteMethod()相当于调用了set方法
           Method methodSetX = pd2.getWriteMethod();
           //set无返回值
           methodSetX.invoke(pt1,value);
      }
 
      private static Object getProperty(Object pt1, String propertyName)
                 throws IntrospectionException, IllegalAccessException,
                 InvocationTargetException {
           /*propertyName想要得到的属性名,即x的值
            * 把pt1.pt1.getClass()看成是一个javabean类型的类,想要取得x的属性值
            * PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
           Method methodGetX = pd.getReadMethod();//getReadMethod()相当于调用了get方法
           Object retVal = methodGetX.invoke(pt1);*/
          
           //这种方法和上面的方法一样的效果
           //BeanInfo代表了一个结果,就是把一个类当做javabean来看,看出来的结果,将看出来的结果封装在BeanInfo里面
           //Introspector.getBeanInfo()这种方法可以是 把一个类当做javabean来看,看出来的结果就是BeanInfo
           BeanInfo beanInfo =  Introspector.getBeanInfo(pt1.getClass());
           //得到的是所有的属性描述,是一个数组
           PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
           Object retVal = null;
           //遍历,增强for循环的使用
           for(PropertyDescriptor pd : pds){
                 //如果这里面的值和传进来的属性的名称一样 获得某属性的值  propertyName是传进来的值
                 if(pd.getName().equals(propertyName))
                 {
                      Method methodGetX = pd.getReadMethod();
                      retVal = methodGetX.invoke(pt1);
                      break;
                 }
           }
           return retVal;
      }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息