JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。
也就是说是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

JavaBean有三个特性:
1、javaBean必须是一个public的类
2、JavaBean有一个不带参数的构造函数
3、JavaBean通过 getPropertyName获取属性,通过setPropertyName设置属性

例如类BeanDemo就是一个Javabean类。

一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。能看到的只有public的方法名。可以看成是一个黑盒子,即只需要知道其功能而不必管其内部结构的软件设备。

 public class BeanDemo {

     private String n;
private int a; public BeanDemo() {
super();
}
public String getName() {
return n;
}
public void setName(String name) {
this.n = name;
}
public int getAge() {
return a;
}
public void setAge(int age) {
this.a = age;
}
}

反射技术实际上已经能够完全满足我们对javaBean的各种操作了,但是为了方便JDK还是为我们提供了一套操纵JavaBean的API,我们称这套API为内省(Introspector)。

1.通过内省的方式用代码演示读取和设置BeanDemo的属性,适合对于某个特定的属性进行内省操作。

 import java.beans.*;
import java.lang.reflect.*; public class IntroSpectorDemo1 { public static void main(String args[]) throws Exception{
BeanDemo bd = new BeanDemo();
PropertyDescriptor pd=new PropertyDescriptor("name",bd.getClass());
Method writeMethod=pd.getWriteMethod();
writeMethod.invoke(bd,"zhangsan");
Method readMethod=pd.getReadMethod();
Object retval=readMethod.invoke(bd);
System.out.println(retval); }
}

java.beans包中
类 PropertyDescriptor描述 Java Bean 通过一对存储器方法导出的一个属性。

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

通过调用 getFoo 和 setFoo 存取方法,为符合标准 Java 约定的属性构造一个 PropertyDescriptor。因此如果参数名为 "fred",则假定 writer 方法为 "setFred",reader 方法为 "getFred"(对于 boolean 属性则为 "isFred")。

参数:propertyName - 属性的编程名称。

beanClass - 目标 bean 的 Class 对象。例如 sun.beans.OurButton.class。
Method getReadMethod()
获得应该用于读取属性值的方法。
Method getWriteMethod()

获得应该用于写入属性值的方法。

2.遍历BeanInfo的所有属性方式来查找和设置BeanDemo的属性,适用于批量操纵javaBean中的方法。

 import java.beans.*;
import java.lang.reflect.*;
public class IntroSpectorDemo2 { public static void main(String args[])throws Exception {
BeanDemo bd = new BeanDemo();
introSpector(bd); }
private static void introSpector(Object bd)throws Exception {
BeanInfo bi = Introspector.getBeanInfo(bd.getClass());
PropertyDescriptor[] pd = bi.getPropertyDescriptors();// for (PropertyDescriptor pds : pd) {
String propertName=pds.getName();//获取属性编程名称
Method writeMethod=pds.getWriteMethod(); if(propertName.equals("name"))
writeMethod.invoke(bd, "zhangsan");
else if(propertName.equals("age"))
writeMethod.invoke(bd, 20);
else
continue; //因为每个类都从Object类中继承了getClass()方法,添加循环判断条件去除扫描此方法。
Method readMethod = pds.getReadMethod();
Object retval = readMethod.invoke(bd);
System.out.println(retval);
}
}
}

在程序中把一个类当作JavaBean来看,就是调用IntroSpector.getBeanInfo方法, 得到的BeanInfo对象封装了把这个类当作JavaBean看的结果信息。

static BeanInfo getBeanInfo(Class<?> beanClass)
在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。
PropertyDescriptor[] getPropertyDescriptors()
获得 beans PropertyDescriptor

java-内省与javabean的更多相关文章

  1. java 内省 了解JavaBean

    JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则. 如果要在两个模块之间传递多个信息,可以将这些信息封装到一个Jav ...

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

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

  3. 内省(introspector)------>JavaBean

    内省(introspector)------>JavaBean    1.问什么要学内省?        开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于 ...

  4. 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性

      本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...

  5. 黑马程序员——【Java高新技术】——JavaBean、注解

    ---------- android培训.java培训.期待与您交流! ---------- 一.JavaBean * 通过内省引入JavaBean:内省对应的英文全程是IntroSpector.在J ...

  6. JAVA内省(Introspector)

    什么是Java内省:内省是Java语言对Bean类属性.事件的一种缺省处理方法. Java内省的作用:一般在开发框架时,当需要操作一个JavaBean时,如果一直用反射来操作,显得很麻烦:所以sun公 ...

  7. Java 内省机制

    一.内省 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的 ...

  8. Java内省机制

    转自: https://blog.csdn.net/hahalzb/article/details/5972421 1.java内省机制其实通俗的理解为,对自身的进行一个扫描,这个扫描的对象就是我们普 ...

  9. Java 内省(Introspector)深入理解

    Java 内省(Introspector)深入理解 一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类 ...

  10. Java 内省(Introspector)和 BeanUtils

    人生若只如初见,何事秋风悲画扇. 概述 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息, ...

随机推荐

  1. ceph与openstack对接

    对接分为三种,也就是存储为openstack提供的三类功能1.云盘,就好比我们新加的硬盘2.原本的镜像也放在ceph里,但是我没有选择这种方式,原因是因为后期有要求,但是我会把这个也写出来,大家自己对 ...

  2. 一个简单xml数据转换为数组的方法

    本人用easywechat做微信回复图文,从数据库中拿到的数据直接是xml拼好的数据,但是框架只有自带的获取xml格式的语句,所有需要将xml数据中所需要的数据拿出来用来拼接. 搜了好多资料说的都很麻 ...

  3. DNX SDK版本 “dnx-clr-win-x86.1.0.0-beta5”无法安装

    打开VS2015,出现 “DNX SDK版本 “dnx-clr-win-x86.1.0.0-beta5”无法安装,该解决方案将对此会话使用DNX SDK版本“dnx-clr-win-x86.1.0.0 ...

  4. Android环境配置及运行helloWord案例

      Android的环境搭建步骤,以及输出一个helloWorder 1:下载Android开发环境   及是: SDK adt-bundle-windows-x86_64-20140702 此时的版 ...

  5. asp.net web api添加统一异常处理

    1.自定义异常处理过滤器 /// <summary> /// 自定义异常处理过滤器 /// </summary> public class CustomExceptionFil ...

  6. Computer Vision 学习 -- 图像存储格式

    本文把自己理解的图像存储格式总结一下. 计算机中的数据,都是二进制的,所以图片也不例外. 这是opencv文档的描述,具体在代码里面,使用矩阵来进行存储. 类似下图是(BGR格式): 图片的最小单位是 ...

  7. 利用OpenShift托管Node.js Web服务进行微信公众号开发

    最近写了一个微信的翻译机器人.用户只要关注该公众号,发送英文的消息,就能收到中文翻译的回复.有兴趣的读者可以扫描下面的二维码关注该公众号,尝试发送英文单词试试看.(有时候第一次发送单词会收到“该公众号 ...

  8. 如何让aspnet服务加载静态资源html(我的动态网页静态化) 转

    我们知道,IIS自身是不能处理像ASPX扩展名这样的页面,只能直接请求像HTML这样的静态文件. 当客户端请求一个服务器资源时,这个HTTP请求会被inetinfo.exe进程截获(www服务),然后 ...

  9. city-picker 选择省市县的一个控件,好用。

    我觉得好奇怪,这么好一个插件,为什么没有设置值的方法,还是我才疏学浅?? 我看有的人做法是把,把源代码里面的自动扫描机制注释掉 // $(function () { // $('[data-toggl ...

  10. vsftp linux

    查看是否安装 rpm -qa|grep vsftpdyum -y install vsftpd /etc/vsftpd/vsftpd.conf    #主配置文件 /usr/sbin/vsftpd   ...