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

一、JavaBean

1、JavaBean是一种特殊的java类,主要用来传递数据信息,这种java类中的方法主要用来访问私有的字段,且方法名符合某种命名规则。

2、如果要在两个模块儿中传递多个信息,可以将这些信息封装到JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)

这些信息在类中用私有字段来存储,如果读取或设置这些信息,需要通过相应的方法来访问。这些方法通常是get和set。

所以JavaBean的属性是根据getter和setter方法来确定的,而不是根据其中的成员变量。它将get或set方法的前缀去掉,保留后面的字段作为自己的属性名。

比如:getId>属性名就是CPU。

3、JDk中对JavaBean的操作提供了一些API,这套API就叫做内省。

需求:用JavaBean的内省获取Test类中的私有成员变量x,y

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//定义一个测试类
class Test{
    private int x;   
    private int y;
    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;
    }
    public Test(int x, int y) {
        super();
        this.x = x;
        this.y = y;
    }  
}
public class Introspector {
    private static String x;
    public static void main(String[] args) throws Exception {
        //创建Test对象
        Test test = new Test(3,5);
        //将要获取的变量封装成对象
        String propertyName = "x";
        //调用获取方法
        getProperty(test, propertyName);       
        
        //定义需要设置后的变量
        Object value = 7;
        setProperty(test, propertyName, value);
        System.out.println(test.getX());
    }
//自定义设置变量的方法,需要传入对象名,变量名,设置后的值
    private static void setProperty(Object obj, String propertyName, Object value)
            throws IntrospectionException, IllegalAccessException,
            InvocationTargetException {
        //创建属性描述对象,传入变量名,变量名所在的类
        PropertyDescriptor pd1 = new PropertyDescriptor(propertyName, obj.getClass());
        //获取方法
        Method methodSetX = pd1.getWriteMethod();
        //操作方法
        methodSetX.invoke(obj, value);
    }
    private static void getProperty(Object obj, String propertyName)
            throws IntrospectionException, IllegalAccessException,
            InvocationTargetException {
        PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());
        Method methodGetX = pd.getReadMethod();
        //操作方法,得到返回的值。因为get方法不需要参数,所以该处只需要传入对象名即可
        Object retVal = methodGetX.invoke(obj);
        System.out.println(retVal);
    }
}

二、Beanutils工具包

1、因为JavaBean的使用频率很高,所以Apache就提供了beanutils工具包来对JavaBean进行操作。

2、需要从Apache官网下载工具包和日志包logging.jar。

3、利用工具包提供的方法来获取上个事例的变量就会很方便,只需要一部。

BeanUtils.getProperty(对象,"变量名");

BeanUtils.setProperty(对象,"变量名","值(这里是字符串)");

也可以PropertyUtils.setProperty(对象,"变量名",实际类型);

这两者区别就是最后面的参数不同。

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

转载于:https://www.cnblogs.com/guoyanjun2013/archive/2013/04/08/3011516.html

黑马程序员--java基础加强之内省(IntroSpector)相关推荐

  1. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  2. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

  3. 黑马程序员--Java基础加强篇

    开发工具使用 --------------------------------------------------------------------------------------------- ...

  4. 黑马程序员-Java基础:面向对象(上)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.面向对象概述 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高.可随着需求的 ...

  5. 黑马程序员-Java基础知识预备之Java流程控制与数组

    -------- android培训.java培训.期待与您交流!---------- 本博文涉及的主要内容如下: if语句 switch语句 循环结构 循环结构的控制 数组类型 数组在内存中的运行机 ...

  6. 黑马程序员—java基础总结1

    ------- android培训.java培训.期待与您交流! ---------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用 ...

  7. 黑马程序员 — JAVA基础 — 内部类、异常

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.内部类 1.概念: 把类定义在另一个类的内部,该类就被称为内部类. Eg:把 ...

  8. 黑马程序员-Java基础加强之枚举

    --------- android培训.java培训.期待与您交流!---------- 一.为什么要有枚举? 问题:要定义季节.星期向或性别的变量,该怎么定义?假设用1-4分别表示春.夏.秋.冬,但 ...

  9. 黑马程序员-Java基础:设计模式总结

    --Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- Java基础部分设计模式 一.设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的 ...

最新文章

  1. context:annotation-config / 和context:component-
  2. Toast的功能和用法
  3. poj 2415(BFS)
  4. 去掉button按钮左右两边的留白
  5. Android笔记之平移View
  6. img = img1*mask + img2*(1-mask) How do that ?
  7. Elasticsearch 支持哪些类型的查询?
  8. 2015年辽宁省赛Interesting Tree
  9. reinterpret_cast 最小demo
  10. awk(三)If语句
  11. 工业级嵌入式串口转wifi模块
  12. idea中使用eclipse快捷键的常用快捷键
  13. videojs播放rtmp视频流,解决TypeError: this.el_.vjs_getProperty is not a function错误
  14. 7z解压crc错误_rar文件解压缩失败解压末端出现错误的解决方法
  15. Steam 最新VR 游戏畅销榜——这几款游戏绝对值得一玩~不来看看你可就错过啦!
  16. Milvus 揭秘| 向量索引算法HNSW和NSG的比较
  17. Python函数和面向对象,小白看了都说好
  18. 字母重排(算法竞赛入门经典)
  19. 雷军:企业如何渡过寒冬?你需要学会这5招
  20. FPGA设计编程(二) 8-3线优先编码器与3-8线译码器

热门文章

  1. 使用Julia进行图像处理--使用形态学运算进行图像调整
  2. 阵列函数 java_Java复制阵列– Java中的阵列复制
  3. 狗熊冬眠_4本最佳的冬眠书–Spring冬眠书
  4. [msi]Cannot open database file. System error -2147287035
  5. eclipse 构建 jpa project 所需的用户库(vendor: EclipseLink)
  6. 敬业签电脑手机云同步便签及安卓手机和苹果手机云同步桌面便签
  7. You (root) are not allowed to access to (crontab) because of pam configuration
  8. 《深入解析IPv6(第3版)》——10.5 失效网关检测
  9. [转]php返回json数据中文显示的问题
  10. 关于SVN提交注释的问题