黑马程序员--JavaBean和注解

---------------------- android培训java培训、期待与您交流! ----------------------

IntroSpector 内省用于操作JavaBean。

JavaBean是一个特殊的Java类,方法符合一定的规则,例如setAge(intage) getAge()。

classPerson{

              privateint age;

       public int getAge(){//javaBean的属性根据get和set方法推断出

       return age;

}

       public void setAge(int age){

       this.age = age;

}

}

Age 如果第二个字母是小写的,则把第一个字母变成小写的age

gettime--> time

getCPU--> CPU

JavaBean的好处

       在JavaEE中,经常使用到JavaBean。很多环境要求按JavaBean方式进行

       JDK中提供了对JavaBean进行操作的一些API,这套API称为内省。

privatestaticvoid setProperty(Object obj, String propertyName,

           Object value) throws IntrospectionException,

           IllegalAccessException, InvocationTargetException {//根据对象和属性名,设置对象的属性值

       PropertyDescriptor pd = newPropertyDescriptor(propertyName,obj.getClass());//获取属性描述

       Method methodSetX = pd.getWriteMethod();//抽取方法

       methodSetX.invoke(obj,value);//调用方法设置

    }

 

    privatestatic Object getProperty(Object obj,

           String propertyName) throws IntrospectionException,

           IllegalAccessException, InvocationTargetException {//根据对象和属性名,获取对象的属性值

//     PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass());//获取属性描述

//     Method methodGetX = pd.getReadMethod();//抽取方法

//     Object retVal= methodGetX.invoke(obj);//调用方法取值

      

       BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());//获取BeanInfo

       PropertyDescriptor[] pds =beanInfo.getPropertyDescriptors();//获取所有的属性描述

       Object retVal = null;

       for(PropertyDescriptor pd:pds){//遍历属性描述

           if(pd.getName().equals(propertyName)){//如果找到需要的属性名

              Method methodGetX = pd.getReadMethod();//获取方法

              retVal = methodGetX.invoke(obj);//调用方法取值

              break;

           }

       }

       return retVal;

    }

 

BeanUtils工具包

       System.out.println(BeanUtils.getProperty(pt,"x"));

       BeanUtils.setProperty(pt,"x","9");

       System.out.println(BeanUtils.getProperty(pt,"x"));

       BeanUtils.setProperty(pt,"birthDay.time","11");//支持属性链

       System.out.println(BeanUtils.getProperty(pt,"birthDay.time"));

    javabean可以和map可以使用BeanUtils互转

 

注解

       相当于一种标记,加了注解就等于打上了某种标记,没加,则等于没打标记。以后在javac编译器开发工具等可以使用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上

       从java.lang包中可以看到JDK提供的最基本的annotation

@SuppressWarnings//SOURCE

@Deprecated//RUNTIME

@Override//SOURCE

注解生命周期

@Retention(RetentionPolicy.RUNTIME)//内存字节码

//@Retention(RetentionPolicy.CLASS)//class文件

//@Retention(RetentionPolicy.SOURCE)//java文件

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值