黑马程序员--内省、javaBean以及BeanUtil
来源:互联网 发布:网络听课 编辑:程序博客网 时间:2024/05/17 07:41
------- android培训、java培训、期待与您交流! ----------
introspector(内省)-->javaBean的操作-->特殊的JAVA类,
JAVABEAN: 名称符合阅读的规则, getXX(), setXX() 这种类可以称之为JAVABEAN
java 类不一定可以当作JAVABEAN进行操作.. 需要看是否有没有SET与GET方法
set方法是带参数的, 将外部的值传递给内部的变量使用, get方法是返回内部变量的值
JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来访问私有的x,怎么做,有一定难度吧?用内省这套api操作JavaBean比用普通类的方式更方便。
首先看一个例子
首先看一个例子
public class IntroSpectorTest { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub ReflectPoint pt1 = new ReflectPoint(3,5); String propertyName = "x"; //在ReflectPoint类里有一个方法叫做getX //"x"-->"X"-->"getX"-->MethodGetX--> //根据 PropertyDescriptor 获取到属性的set 以及 get 方法,返回是Object类型, 这里是被抽出来的方法 Object retVal = getProperty(pt1, propertyName); //此方法相当于我们用类的实例对象get到属性的方法 System.out.println(retVal); // 原来ReflectPoint里x 的值为3 获取上来, 所以值是3 Object value = 7; //我们要将进赋值给x setProperties(pt1, propertyName, value); // 这个方法相当于set属性, set 进去后打印的值其实是null. // 因为他只做赋值操作,不做获取值的操作.. 根据经验来断定,这里绝对是null System.out.println( getProperty(pt1, propertyName)); //这时候再获取一遍 值为7, 因为赋值过了 } private static void setProperties(Object pt1, String propertyName, Object value) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass()); // 先用PropertyDescriptor获取到成员的属性方法, 接着再作用于对象,是通过pt1.class获取来的 Method methodSetX = pd2.getWriteMethod(); //获取对象的成员赋值写入的方法.. 其实这步应该加上变量的字节码会 //让代码变得更严谨.. 目测getWriteMethod 内部已经封装好了 //赋值变量的字节码--obejct.class, 此方法与Field一样 //不用是的Field是变量的方法, 而Propertry 故名思意: 参数 methodSetX.invoke(pt1,value); //执行赋值操作, 作用pt1对象 } private static Object getProperty(Object pt1, String propertyName) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass()); //通过名字先得到JAVABEAN里的成员,作用于PT1这个对象上 Method methodGetX = pd.getReadMethod(); // 然后获取到成员的get 方法 return methodGetX; }}
BeanInfo 的使用
IntroSpector.getBeanInfo(); 这个方法相当于得到一个BeanInfo对象, 可以把普通的JAVA类当成封装好的JAVABEAN来看,返回结果
IntroSpector.getBeanInfo(); 这个方法相当于得到一个BeanInfo对象, 可以把普通的JAVA类当成封装好的JAVABEAN来看,返回结果
BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass()); //将pt1当成JAVABEAN来看PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); //返回来pt1里所有的属性,不能只返回一个//然后迭代它. 接着判断属性的名字即可 Object retVal = null; for(PropertyDescriptor pd : pds){ if(pd.getName().equals(propertyName)) //比如说 正要操作的是"x"这个属性, 那么判断到x的时候执行 { Method methodGetX = pd.getReadMethod(); //这个属性有Read 和 Writer 2个, 这里我们要做读取 //所以是Read retVal = methodGetX.invoke(pt1);//get方法不需要值, 直接作用于对象实例即可 获取到的值赋值给retVal break; } } return retVal;
BeanUtil的使用
BeanUtil 是一个JAR包(这句省略).. 从appache上去下载common-BeanUtil工具包,
System.out.println(BeanUtils.getProperty(pt1,"x"));//由于BeanUtil 里的方法也是引用别人的包, 所以这里还需要导入一个日志包System.out.println(BeanUtils.getProperty(pt1, "x").getClass().getName()); // 获取上来竟然是字符串类型, 不可思议BeanUtils.setProperty(pt1, "x", "9"); //细节: 这里传的是一个字符串 , 其实类里是一个int类型, //由于BeanUtil会将所有的值都转成字符串操作System.out.println(pt1.getX()); // 获取回来, 答案是 9;
PropertyUtil 的使用
类似于BeanUtil , 不同的是Property里的getProperty 方法里传的是参数原本类型, 而BeanUtil传的是字符串
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员--内省、javaBean以及BeanUtil
- 黑马程序员_类加载器、内省、JavaBean、BeanUtil学习笔记
- 黑马程序员---内省JavaBean
- 黑马程序员---JavaBean & 内省
- 黑马程序员--内省JavaBean
- 黑马程序员-内省,javabean
- 黑马程序员--JavaBean内省
- 黑马程序员-----BeanUtil操作Javabean与注解
- 黑马程序员-内省和JavaBean
- 黑马程序员---javaBean & introspector(内省)
- 黑马程序员----内省,了解 javaBean
- 黑马程序员--JavaBean与内省
- 黑马程序员_java高新javaBean内省
- 黑马程序员__内省和JavaBean
- 黑马程序员-内省、操作JavaBean工具类
- 黑马程序员-------(高新技术)内省、JavaBean
- 黑马程序员:Java基础总结----JavaBean 内省
- 黑马程序员_Java高新技术之 内省 JavaBean
- HALCON 算子函数(四) File
- 苹果开发者帐号(Company)申请流程
- sock编程学习2
- xcode4的环境变量,Build Settings参数,workspace及联编设置
- ios 真机抓取数据包
- 黑马程序员--内省、javaBean以及BeanUtil
- Android 判断手机当前的网络状态
- PHP中刷新输出缓冲
- 转:Camera模块解析之驱动篇
- HALCON 算子函数(六) Graphics
- jquery实现调用webservice
- jpeg6b直接解码yuv
- 如何让textField输入框 限制输入字数的同时,还只让输入数字和字母
- Hibernate Tools 自定义模板