黑马程序员:Java基础总结----JavaBean 内省

时间:2022-08-28 17:32:51
黑马程序员: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基础班&plus;就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程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. 剑指Offer面试题:14&period;链表的倒数第k个节点

    PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...

  2. 1 web&period;xml配置详解

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  3. CSS布局概述

    1.HTML5文档类型 由于Bootstrap使用了HTML5特定的HTML元素和CSS属性,所以使用Bootstrap的时候,所有的HTML文件都需要在其顶部引用HTML5的DOCTYPE属性,如下 ...

  4. 常见资源记录定义(Resource Record)

    所有的RRs(Resource Records)都具有相同的*字段格式定义:owner  TTL CLASS TYPE RDATA owner 指示拥有资源记录的DNS域名 TTL 对大多数资源记录 ...

  5. 【phpMyAdmin】更改配置文件连接到其他server

    默认phpMyAdmin安装完毕后对机器的访问mysql,但有时我们需要访问其它server的mysql数据库,所以我们需要配置. 真,phpMyAdmin已经为我们做了配置的选项.可是须要我们进行一 ...

  6. canvas的常见用法

    Canvas canvas是一种抽象概念,是2D图形系统中的重要部分,canvas一系列函数最终都是android 2D图形库Skia的一些列封装,对应在SKCanvas.cpp.canvas在系统中 ...

  7. git常用命令&lpar;转载自用&rpar;

    转载自 阮一峰博客: http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 一个码农博客: http://blog.gitor.org ...

  8. 【转】MySQL— 基础

    [转]MySQL— 基础 目录 一.MySQL概述 二.下载安装 三.数据库操作 四.数据表操作 五.表内容操作 一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司 ...

  9. 理解linux下的load

    我们在做Linux负载计算的时候,我们需要了解负载的几个概念 1)Linux负载是什么 2)Linux负载怎么计算 3)如何区分目前负载是“好”还是“坏” 4)什么时候应该注意哪些不正常的值   1) ...

  10. python记录&lowbar;day31 进程同步和进程通信

    一.进程同步 1.同步锁(又叫互斥锁) 加锁的代码以后,同一时间内只能被一个进程执行 from multiprocessing import Process, Lock def fun(loc): l ...