java-内省与javabean
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的更多相关文章
- java 内省 了解JavaBean
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则. 如果要在两个模块之间传递多个信息,可以将这些信息封装到一个Jav ...
- 黑马程序员:Java基础总结----JavaBean 内省
黑马程序员:Java基础总结 JavaBean 内省 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean 内省 软件包 java.beans 包含与开 ...
- 内省(introspector)------>JavaBean
内省(introspector)------>JavaBean 1.问什么要学内省? 开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于 ...
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...
- 黑马程序员——【Java高新技术】——JavaBean、注解
---------- android培训.java培训.期待与您交流! ---------- 一.JavaBean * 通过内省引入JavaBean:内省对应的英文全程是IntroSpector.在J ...
- JAVA内省(Introspector)
什么是Java内省:内省是Java语言对Bean类属性.事件的一种缺省处理方法. Java内省的作用:一般在开发框架时,当需要操作一个JavaBean时,如果一直用反射来操作,显得很麻烦:所以sun公 ...
- Java 内省机制
一.内省 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的 ...
- Java内省机制
转自: https://blog.csdn.net/hahalzb/article/details/5972421 1.java内省机制其实通俗的理解为,对自身的进行一个扫描,这个扫描的对象就是我们普 ...
- Java 内省(Introspector)深入理解
Java 内省(Introspector)深入理解 一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类 ...
- Java 内省(Introspector)和 BeanUtils
人生若只如初见,何事秋风悲画扇. 概述 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息, ...
随机推荐
- 修改Arduino串口缓冲区大小(转)
本帖节选自<Arduino程序设计基础>第二版5.1.6串口缓冲区 在之前的示例程序中,我们都是采用人工输入测试数据的方式检验程序效果,Arduino每接收到一次数据,就会将数 ...
- Redis 缓存 + Spring 的集成示例
参考网址:http://blog.csdn.net/defonds/article/details/48716161
- 使用PS过程
1. 设置图层背景色和前景色 设置背景色和前景色方法类似,下面以设置背景色为例说明.方法一:使用色板设置图片背景色第一步:单击"文件"菜单,选择"新建文档",这 ...
- MVC将服务器端的物理路径转换为服务器路径
以图片为例 后台Controller.cs public FileResult ImageUrl(string file) { return File("物理路径"+file, & ...
- Lucene教程(转)
Lucene教程 1 lucene简介1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来 ...
- python学习之——调用adb命令完成移动端界面测试
实现原理 Hierarchy Viewer:获得当前手机实时的UI信息,方便用于手机的自动化测试: python中的subprocess.Popen():调用系统命令: uiautomator工具:获 ...
- 安装swoole 扩展,在phpinfo中显示,但是php -m 中不显示的问题
步骤如下: 1 首先找到php.ini的目录:linux命令:find / -name php.ini 我的路径如下:
- 第六章 springboot + 事务(转载)
本篇博客转发自:http://www.cnblogs.com/java-zhao/p/5350106.html 在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. myba ...
- rem字体响应式布局
引用js,自动算字体大小,响应式布局 <script> var iScale = 1; iScale = iScale / window.devicePixelRatio; documen ...
- .Net中的加密解密
返回博客列表 转 .Net中的加密解密 李朝强 发布时间: 2015/11/23 12:55 阅读: 33 收藏: 3 点赞: 0 评论: 0 在一些比较重要的应用场景中,通过网络传递数据需要进行加密 ...