黑马程序员:Java基础总结



JavaBean 内省

 
ASP.Net+Android+IO开发

.Net培训
、期待与您交流!




JavaBean  内省

软件包 java.beans

包含与开发 beans 有关的类,即基于 JavaBeansTM 架构的组件。


JavaBean是一种特殊的Java类,主要用于传递数据信息--称之为值对象,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,大家觉得这些方法的名称叫什么好呢?JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,至于你把它存到哪个变量上,用管吗?如果方法名为getId,中文意思即为获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
      isLast()的属性名     ==    last
      setCPU的属性名是什么?    ==   CPU


总之,一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。

一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,我们才会去了解和应用JavaBean!好处如下:
在Java EE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和要求这么做,那你就没什么挑选的余地!

class Bean {
       public int getX() {
             return x ;
      }

       public void setX(int x) {
             this.x = x;
      }

       public int getY() {
             return y ;
      }

       public void setY(int y) {
             this.y = y;
      }

       private int x ;
       private int y ;

       public Bean(int x, int y) {
             super();
             this.x = x;
             this.y = y;
      }
}

内省
JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来访问私有的x,怎么做,有一定难度吧?用内省这套api操作JavaBean比用普通类的方式更方便。

类:java.beans.PropertyDescriptor
构造方法摘要
PropertyDescriptor(String propertyName, Class<?> beanClass)
          通过调用 getFoo 和 setFoo 存取方法,为符合标准 Java 约定的属性构造一个 PropertyDescriptor。

            Bean bean = new Bean(3, 5);
            String propertyName = "x";
            PropertyDescriptor pd = new PropertyDescriptor(propertyName,
                        bean.getClass());
            Method setX = pd.getWriteMethod();
            setX.invoke(bean, 10);
            System. out.println(bean.getX());

 void setReadMethod(Method readMethod)
          设置应该用于读取属性值的方法。
 void setWriteMethod(Method writeMethod)
          设置应该用于写入属性值的方法。
 Method getReadMethod()
          获得应该用于读取属性值的方法。
 Method getWriteMethod()
          获得应该用于写入属性值的方法。

抽取方法:
       public static void setPro(Object bean, String propertyName, Object setVal)
                   throws Exception {
            PropertyDescriptor pd = new PropertyDescriptor(propertyName,
                        bean.getClass());
            Method setX = pd.getWriteMethod();
            setX.invoke(bean, setVal);
      }


类:java.beans.Introspector(复杂办法,,遍历数组)
static BeanInfo getBeanInfo(Class<?> beanClass)
          在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。
PropertyDescriptor[] getPropertyDescriptors()
          获得 beans PropertyDescriptor

BeanInfo beanInfo =  Introspector.getBeanInfo(pt1.getClass());
            PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
            Object retVal = null;
             for(PropertyDescriptor pd : pds){
                   if(pd.getName().equals(propertyName))
                  {
                        Method methodGetX = pd.getReadMethod();
                        retVal = methodGetX.invoke( pt1);
                         break;
                  }
            }

Beanutils工具包
commons 阿帕奇 javabean 工具包,都是静态方法

用eclipse如何加入jar包:
1:新建文件夹lib
2:把jar包复制进lib里面
3:右键jar包,setpath 让jar变奶瓶

下面加入阿帕奇的两个包beanutils和logging日志开发包

import org.apache.commons.beanutils.BeanUtils;
将值以字符串进行操作
            System. out.println(BeanUtils.getProperty(bean, "x"));
            BeanUtils. setProperty(bean, "x", "11");
import org.apache.commons.beanutils.PropertyUtils ;
将值以原类型的包装类进行操作
            PropertyUtils. setProperty(pt1 , "x" , 9);
            System. out.println(PropertyUtils.getProperty( pt1, "x").getClass().getName());

//java7的新特性
Map map = {name: "zxx",age:18};
BeanUtils.setProperty(map, "name", "lhm" );





 
ASP.Net+Android+IO开发

.Net培训
、期待与您交流!

黑马程序员:Java基础总结----JavaBean 内省的更多相关文章

  1. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  2. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  3. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  4. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  5. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  6. 黑马程序员——JAVA基础之语法、命名规则

    ------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...

  7. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  8. 黑马程序员——JAVA基础之多线程的安全问题

    ------- android培训.java培训.期待与您交流! ---------- 导致多线程出现问题的一个特殊的状态:就绪.具备了执行资格,但是还没有获取资源. 导致安全问题的出现的原因: 1. ...

  9. 黑马程序员——JAVA基础之简述设计模式

    ------- android培训.java培训.期待与您交流! ---------- 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓 ...

  10. 黑马程序员——JAVA基础之常用DOS命令和环境变量的配置

    ------- android培训.java培训.期待与您交流! ----------   1.常用dos命令: dir   显示当前文件下目录                             ...

随机推荐

  1. C#抓取AJAX页面的内容

    原文 C#抓取AJAX页面的内容 现在的网页有相当一部分是采用了AJAX技术,所谓的AJAX技术简单一点讲就是事件驱动吧(当然这种说法可能很不全面),在你提交了URL后,服务器发给你的并不是所有是页面 ...

  2. 国内首篇介绍JanOS物联网操作系统的文章 - 如何把你的手机主板打造成物联网平台

    天地会珠海分舵注:如无意外,您现在正在看的将是国内首篇且是唯一一篇介绍炙手可热的物联网的操作系统JanOS的文章!不信你去百度!希望大家能喜欢.但本文只是引言,更多信息请还是访问JanOS的官网:ht ...

  3. Sample Page

    This is an example page. It's different from a blog post because it will stay in one place and will ...

  4. WebApi 插件式构建方案

    WebApi 插件式构建方案 WebApi 插件式构建方案 公司要推行服务化,不可能都整合在一个解决方案内,因而想到了插件式的构建方案.最终定型选择基于 WebApi 构建服务化,之所以不使用 WCF ...

  5. [转]Mysql explain用法和性能分析

    本文转自:http://blog.csdn.net/haifu_xu/article/details/16864933  from  @幸福男孩 MySQL中EXPLAIN解释命令是显示mysql如何 ...

  6. HTML5学习资源

    http://www.silverlightchina.net/html/HTML_5/study/ 我们一起学:HTML5标签系列教程(一)-video标签 版权声明:本文博客原创文章.博客,未经同 ...

  7. BitNami-Redmine安装和VisualSVN-Server配合使用

    原文:BitNami-Redmine安装和VisualSVN-Server配合使用 BitNami-Redmine安装和VisualSVN-Server配合使用 2011-05-04 10:48:22 ...

  8. javascript 正则介绍

    1.正则直接量字符 \o NUL字符(\u000)\t 制表符\n 换行符(\u000A)\v 垂直制表符\f 换页符\xnn 由16进制nn指定的拉丁字符\uXXXX 由16进制XXXX指定的unc ...

  9. ref引用类型,数组型参数,out输出参数

    ref和out的相同点和不同点 共同点:都是引用传递不同点:ref的参数在调用之前一定要赋值,在方法调用的过程中可以不要赋值.    out的参数在调用之前可以不赋值,在方法调用的过程中一定要赋值. ...

  10. 使用 ArcGIS Online和APP进行监控操作和数据采集

    主要介绍的App是Operations Dashboard for ArcGIS 和 Collector for ArcGIS,它们 提高了组织内日常操作的效率.精度和响应速度. 已经购买了 ArcG ...