Java高新技术  JavaBean内省



知识概要:

                (1)了解JavaBean内省

                (2)JavaBean的简单内省操作

                (3)使用BeanUtils来操作JavaBean

               

了解JavaBean内省



JavaBean是一种特殊的Java类,主要用于传递数据信息,

这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,

这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。

这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,

则需要通过一些相应的方法来访问,大家觉得这些方法的名称叫什么好呢?

JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。

如果方法名为setId,中文意思即为设置id,至于你把它存到哪个变量上,用管吗?如果方法名为getId,中文意            思即为获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个            字母是小写的,则把剩余部分的首字母改成小的。

setId()的属性id

 isLast()的属性名last

 setCPU的属性名是什么?  CPU

 getUPS的属性名是什么? UPS

总之,一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,

它根本看不到java类内部的 成员变量。

一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好 处,我们才会去了解和应用JavaBean!好处如下:

在Java EE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,

别人都这么用和要求 这么做,那你就没什么挑选的余地!

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

内省综合案例

演示用eclipse自动生成 ReflectPoint类的setter和getter方法。


直接new一个PropertyDescriptor对象的方式来让大家了解JavaBean API的价值,

先用一段代码读取JavaBean的属性,然后再用一段代码设置JavaBean的属性。


演示用eclipse将读取属性和设置属性的流水帐代码分别抽取成方法:


只要调用这个方法,并给这个方法传递了一个对象、属性名和设置值,它就能完成属性修改的功能。


得到BeanInfo最好采用“obj.getClass()”方式,而不要采用“类名.class”方式,这样程序更通用。


采用遍历BeanInfo的所有属性方式来查找和设置某个RefectPoint对象的x属性。在程序中把一个类当作JavaBean来

看,就是调用IntroSpector.getBeanInfo方法, 得到的BeanInfo对象封装了把这个类当作JavaBean看的结果信息
package cn.itheima.day1;

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; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils; public class IntroSPectorTest {
public static void main(String[] args) throws Exception{
ReflectPoint pt1 = new ReflectPoint(3,5);; String propertyName = "x"; Object retVal = getProperty(pt1, propertyName);
System.out.println(retVal); Object value = 7;
setProperties(pt1, propertyName, value); System.out.println(BeanUtils.getProperty(pt1,"x"));
BeanUtils.setProperty(pt1,"x","9");
System.out.println(BeanUtils.getProperty(pt1,"x"));
//java7新特性。
//Map map =(name:"cuizhaojin",age:18);
//BeanUtils.setProperty(map, "name", "cuizhao");
BeanUtils.setProperty(pt1,"birthday.time","2014"); String birthday = BeanUtils.getProperty(pt1,"birthday.time"); System.out.println(birthday); PropertyUtils.setProperty(pt1,"x",9); System.out.println(PropertyUtils.getProperty(pt1, "x").getClass()); } private static void setProperties(Object pt1, String propertyName, Object value) throws IntrospectionException, IllegalAccessException, InvocationTargetException {
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodSetX =pd2.getWriteMethod();
methodSetX.invoke(pt1,value);
} private static Object getProperty(Object pt1, String propertyName) throws Exception
/*throws IntrospectionException, IllegalAccessException, InvocationTargetException {
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX =pd.getReadMethod();
Object retVal = methodGetX.invoke(pt1);*/{ 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; }
}
return retVal;
}
}

图例:

PropertyUtils类也可以操作对象的属性,但是与BeanUtils不同的是它不能进行自动类型转换。

例如Person类中的age属性为int类型,但是设置属性值的时候传入的参数就不可以是String类型。

如果设置成了String类型,那么将会报错。




Java高新技术 JavaBean内省的更多相关文章

  1. Java核心_内省

    Java核心_内省 查看java的api,发现有一个包java.bean咦,这个包是干什么的呢,原来,它是用来操作JavaBean对象的! 一.内省操作①JavaBean:一种特殊的Java类无参构造 ...

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

    黑马程序员:Java基础总结 JavaBean 内省   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean  内省 软件包 java.beans 包含与开 ...

  3. jsp 以及javabean内省技术

    l JSP l JavaBean及内省 l EL表达式 1.1 上次课内容回顾 会话技术: Cookie:客户端技术.将数据保存在客户端浏览器上.Cookie是有大小和个数的限制. Session:服 ...

  4. Java基础之内省

    Java基础之内省 什么是内省   首先,我们要知道什么是内省.按我自己的理解就是在反射的原理上进行封装,来更方便的操作JavaBean JavaBean就是特殊格式的类,其规范为: JavaBean ...

  5. JavaBean内省与BeanInfo

    Java的BeanInfo在工作中并不怎么用到,我也是在学习spring源码的时候,发现SpringBoot启动时候会设置一个属叫"spring.beaninfo.ignore", ...

  6. Java高新技术 注解

      Java高新技术 注解 知识概要:                  (1)了解注解 (2)注解的应用结构图 (3)@Retention(RetentionPolicy.RUNTIME)    ...

  7. Java高新技术 反射机制

     Java高新技术 反射机制 知识概要:                   (1)反射的基石 (2)反射 (3)Constructor类 (4)Field类 (5)Method类 (6)用反射方 ...

  8. Java高新技术 JDK1.5之新特性

      Java高新技术  JDK1.5的新特性 知识概要:                 (1)静态导入 (2)可变参数 (3)增强for循环 (4)基本数据类型的自动拆箱和装箱 静态导入     ...

  9. Java高新技术 Myeclipse 介绍

      Java高新技术   Myeclipse 介绍 知识概述:              (1)Myeclipse开发工具介绍 (2)Myeclipse常用开发步骤详解               ...

随机推荐

  1. Java基础学习——泛型

    一.泛型方法 /** 自定义泛型:自定义泛型可以理解为是一个数据类型的占位符,或者理解为是一个数据类型的变量. 泛型方法: 泛型方法的自定义格式:修饰符<声明自定义泛型>返回值类型 函数名 ...

  2. [js高手之路]gulp教程-从入门到项目中快速上手使用

    在这之前,我已经分享过一个webpack的全系列,相对于webpack, gulp使用和配置起来非常的简单. gulp是什么? gulp 是基于 node 实现 Web 前端自动化开发的工具,利用它能 ...

  3. 操作系统:ucore的部分Bug&挑战练习

    ucore是清华大学提供的一个学习操作系统的平台.ucore有完整的mooc视频与说明文档. https://objectkuan.gitbooks.io/ucore-docs/content/# 本 ...

  4. 《深入浅出MySQL》之SQL基础

    SQL是Structure Query language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言.在众多开源数据中,MySQL正式其中最杰出的代表,MySQL是由三个瑞典人于20世纪 ...

  5. 为什么说汽车VIN码是汽车唯一的"身份证"

    人有身份证,那么车有吗?当然了,汽车也是有"身份证"的,出厂时就会跟着车辆一起出生, 一般在车辆的挡风玻璃处.按照国际SAE国际规定,Vin码由17位字符组成,其中包含了车辆的生产 ...

  6. vmware 遇到 “无法打开内核设备 \\.\Global\vmx86” 解决

    问题描述:vmware没有正常关闭,再次打开使用时蓝屏,在安全模式下再次打开不会蓝屏,但提示"无法打开内核设备 \.\Global\vmx86: 系统找不到指定的文件,你想要安装VMware ...

  7. 第二次项目冲刺(Beta阶段)--第七天

    一.站立式会议照片 二.项目燃尽图 三.项目进展 codingnet:https://git.coding.net/tuoxie/chachong-beta.git 1.对项目进行全面的测试 2.继续 ...

  8. 201521123024《Java程序设计》第7周学习总结

    1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boolean contains(Object o) { re ...

  9. python类型转换、数值操作(收藏)

    最近学习python语言,碰到数据类型间的转换问题.看到一篇文章总结的挺详细,收藏之备用. 类型转换 代码  1 函数                      描述  2 int(x [,base  ...

  10. 《Head First 设计模式》读书笔记(1) - 策略模式

    <Head First 设计模式>(点击查看详情) 1.写在前面的话 之前在列书单的时候,看网友对于设计模式的推荐里说,设计模式的书类别都大同小异,于是自己就选择了Head First系列 ...