java 中的内省机制
来源:互联网 发布:信捷plc编程软件xc xd 编辑:程序博客网 时间:2024/05/17 09:38
内省是 java 语言对 bean 类属性、事件的一种处理方法(也就是说给定一个javabean对象,我们就可以得到/调用它的所有的get/set方法)。
例如类 a 中有属性 name, 那我们可以通过 getname,setname 来得到其值或者设置新的值。通过 getname/setname 来访问 name 属性,这就是默认的规则。
java 中提供了一套 api 用来访问某个属性的 getter/setter 方法,通过这些 api 可以使你不需要了解这个规则,这些 api 存放于包 java.beans 中。
一般的做法是通过类 introspector 的 getbeaninfo方法 来获取某个对象的 beaninfo 信息,然后通过 beaninfo 来获取属性的描述器(propertydescriptor),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射机制来调用这些方法。
内省测试类:introspector.java
java代码
package com.royzhou.bean;
import java.beans.beaninfo; import java.beans.introspector; import java.beans.methoddescriptor; import java.beans.propertydescriptor;
public class introspectortest {
public static void main(string[] args) throws exception {
simplebean sb = new simplebean("royzhou",new string[]{"football","backetball"});
system.out.println(sb);
/**
* 使用introspector.getbeaninfo(simplebean.class)将bean的属性放入到beaninfo中。
* 第二个参数为截止参数,表示截止到此类之前,不包括此类。
* 如果不设置的话,那么将会得到本类以及其所有父类的info。
* beaninfo中包含了simplebean的信息
*/
beaninfo beaninfo = introspector.getbeaninfo(sb.getclass());
//将每个属性的信息封装到一个propertydescriptor形成一个数组其中包括属性名字,读写方法,属性的类型等等propertydescriptor[] propertys = beaninfo.getpropertydescriptors();
for(propertydescriptor property : propertys) {
system.out.println("属性名:" + property.getname()); system.out.println("类型:" + property.getpropertytype());
}
system.out.println();
system.out.println("列出simplebean的所有方法"); methoddescriptor[] methods = beaninfo.getmethoddescriptors();
for(methoddescriptor method : methods) {
system.out.println(method.getname());
}
system.out.println();
/**
*重新设置属性值
*/
for(propertydescriptor property : propertys) {
if(property.getpropertytype().isarray()){//getpropertytype得到属性类型。
if(property.getpropertytype().isarray()) { if("hobby".equals(property.getname())) {
//getcomponenttype()可以得到数组类型的元素类型
if(property.getpropertytype().getcomponenttype().equals(string.class)) {
//getwritemethod()得到此属性的set方法----method对象,然后用invoke调用这个方法
property.getwritemethod().invoke(sb, new object[]{new string[]{"tennis","fishing"}});
}
}
}
} else if("name".equals(property.getname())) { property.getwritemethod().invoke(sb, new object[] { "royzhou1985" });
}
}
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
- java 中的内省机制
- 《JavaBean》----Java中的内省机制二
- java内省机制运用
- Java内省机制
- java的内省机制
- Java内省机制
- java内省机制
- java内省机制
- java内省机制介绍
- Java内省机制
- Java内省机制
- Java内省机制
- java内省机制
- Java内省机制
- java 内省机制
- Java 内省机制
- Java内省机制
- Java内省机制IntroSpector
- JavaScript对象模型-执行模型
- Java中关于OOM的场景及解决方法
- java中日期加减计算(转)
- 令人惊奇的JavaScript面向对象(二)
- java 几种远程服务调用协议的比较
- java 中的内省机制
- Java字节码(.class文件)的代码解析
- Java Singleton的5种实现
- Java语言程序设计2(37)
- Java学习日志(二)
- [原创]理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datasource 的不同之处。
- 深入Java集合学习系列:ArrayList的实现原理
- Java操作压缩与解压缩
- java 多线程应用