java学习资料内省、注解与类加载器

上传人:xiao****1972 文档编号:84822306 上传时间:2019-03-05 格式:DOC 页数:12 大小:143.50KB
返回 下载 相关 举报
java学习资料内省、注解与类加载器_第1页
第1页 / 共12页
java学习资料内省、注解与类加载器_第2页
第2页 / 共12页
java学习资料内省、注解与类加载器_第3页
第3页 / 共12页
java学习资料内省、注解与类加载器_第4页
第4页 / 共12页
java学习资料内省、注解与类加载器_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《java学习资料内省、注解与类加载器》由会员分享,可在线阅读,更多相关《java学习资料内省、注解与类加载器(12页珍藏版)》请在金锄头文库上搜索。

1、第一节 由内省IntroSpector引出JavaBean一、概述:1、IntroSpector:即内省,是对内部进行检查,了解更多的底层细节。2、内省的作用:主要针对JavaBean进行操作。二、JavaBean(存在于java.bean包中)1、简述:1)JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法都符合某种特殊的命名规则。2)它是一种特殊的Java类,其中的方法名称等,都符合特殊的规则。只要一个类中含有get和set打头的方法,就可以将其当做JavaBean使用。2、作用:如果要在两个模板之间传递多个信息,可将这些信息

2、封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO),这些信息在类中用私有字段来储存,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。3、命名方式:JavaBean的属性是根据其中的setter和getter方法来确定的,而不是依据其中的变量,如方法名为setId,则中文意思是设置Id,getId也是如此;去掉前缀,剩余部分就是属性名称,如果剩余部分的第二个字母小写,则把剩余部分改为小写。如:getAge/setAge-age;gettime-time;setTime-time;getCPU-CPU。4、总之、一个类被当

3、做JavaBean使用时,JavaBaan的属性是根据方法名推断出来的,它根本看不到Java类内部的成员变量。5、JavaBean的好处:一个符合JavaBean特点的类当做普通类一样可以使用,但是把它当做JavaBean类用肯定有好处的:1)在JavaEE开发中,经常要使用JavaBean。很多环境就要求按JavaBean的方式进行操作,别人都这么用,那么就必须要求这么做。2)JDK中提供了对JavaBean进行操作的API,这套API称为内省,若要自己通过getX的方式来访问私有x,可用内省这套API,操作JavaBean要比使用普通的方式更方便。示例:package cn.itcast.

4、text1;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;public class IntroSpectorTest /* * param args */* * public static void main

5、(String args) throws Exception / TODO Auto-generated method stubReflectPoint pt1 = new ReflectPoint(3,5);String propertyName = x;/x-X-getX-MethodGetX-/内省的方式:/属性描述符:PropertyDescriptor/get属性信息PropertyDescriptor pd =new PropertyDescriptor(propertyName,pt1.getClass();Method methodGetX = pd.getReadMethod

6、();Object retVal = methodGetX.invoke(pt1);System.out.println(retVal);/set属性信息Object value = 7;PropertyDescriptor pd2 =new PropertyDescriptor(propertyName,pt1.getClass();Method methodSetX = pd2.getWriteMethod();methodSetX.invoke(pt1,value);System.out.println(pt1.getX(); */上面的get或set代码分别通过选中要重构的代码,通过右

7、击选重构获得get和set方法:public static void main(String args) throws Exception / TODO Auto-generated method stubReflectPoint pt1 = new ReflectPoint(3,5);String propertyName = x;/一般方式:x-X-getX-MethodGetX-/内省方式:/通过get和set方法获取属性值Object retVal = getProperty(pt1, propertyName);System.out.println(retVal);Object va

8、lue = 7;setProperty(pt1, propertyName, value);System.out.println(pt1.getX();/设置属性值的方法 /此处的类型为Object,通用,下同private static void setProperty(Object rf, String propertyName,Object value) throws IntrospectionException,IllegalAccessException, InvocationTargetException /创建属性描述符对象,将属性名称和加载文件等信息写入其中PropertyDe

9、scriptor pd =new PropertyDescriptor(propertyName,rf.getClass();/通过反射的方法类Method,获取属性所对应的set方法Method methodSetX = pd.getWriteMethod();methodSetX.invoke(rf, value);/获取属性值的方法private static Object getProperty(Object rf, String propertyName)throws IntrospectionException, IllegalAccessException,InvocationT

10、argetException /创建属性描述符对象,获取属性所对应的名称和加载文件等信息PropertyDescriptor pd =new PropertyDescriptor(propertyName,rf.getClass();/通过反射的方法类Method,获取属性所对应的get方法Method methodGetX = pd.getReadMethod();Object retVal = methodGetX.invoke(rf);return retVal;三、对JavaBean的复杂内省操作:1、在IntroSpector类中有getBeanInfo(Class cls)的方法。

11、2、获取Class对象的Bean信息,返回的是BeanInfo类型。3、BeanInfo类中有getPropertyDescriptors()的方法,可获取所有的BeanInfo的属性信息,返回一个PropertyDescriptor。4、在通过遍历的形式,找出与自己想要的那个属性信息。如:改写get方法:BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass();PropertyDescriptor pds = beanInfo.getPropertyDescriptors();Object value = null;for(Pro

12、pertyDescriptor pd : pds)if(pd.getName().equals(propertyName)Method methodGetX = pd.getReadMethod();value = methodGetX.invoke(pt1);break;这种方式要比上面的方法复杂些。四、BeanUtils工具包:1、BeanUtils等工具包都是有阿帕奇提供的,为了便于开发。2、好处:1)提供的set或get方法中,传入的是字符串,返回的还是字符串,因为在浏览器中,用户输入到文本框的都是以字符串的形式发送至服务器上的,所以操作的都是字符串。也就是说这个工具包的内部有自动将整

13、数转换为字符串的操作。2)支持属性的级联操作,即支持属性链。如可以设置:人的脑袋上的眼镜的眼珠的颜色。这种级联属性的属性连如果自己用反射,那就很困难了,通过这个工具包就可以轻松调用。3、可以和Map集合进行相互转换:可将属性信息通过键值对的形式作为Map集合存储(通过static java.util.Map describe(java.lang.Object bean)的方法),也可以将Map集合转换为JavaBean中的属性信息(通过static void populate(java.lang.Object bean, java.util.Map properties)的方法)。示例:假定有

14、个birthday的私有属性private Date birthday = new Date();set方法:BeanUtils.getProperty(pt1”birthday.time”,”111”)get方法:String value = BeanUtils.getProperty(pt1,”x”)4、补充:1)BeanUtils是以字符串的形式进行操作的2)PropertyUtils是以传入值本身的类型进行操作的。第二节 注解- JDK1.5一、概述:1、注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则没有某种标记。2、以后,java编译器、开发工具和其他应用程序就可以用反射来了解自己的类及各种元素上有无何种标记,有什么标记,就会做出相应的处理。3、标记可以加在包、类、字段、方法、方法参数,以及局部变量上等等。4、在java.lang包中提供了最基本的annotation,即注解。5、格式:注解类名()。如果有属性,则在括号中加上属性名(可省略)和属性值。二、java中三种最基本的注解:1、SuppressWarning(”deprecation”)-压制警告SupressWarning是告知编译器或开发工具等提示指定的编译器警告;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号