内省(Introspector) — JavaBean
什么是JavaBean和字段/属性的读写方法?
访问JavaBean属性的两种方式:
1)直接调用bean的setXXX或getXXX方法。
2)通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式:属性描述器类(PropertyDescriptor)
和内省类
注意:内省认为JavaBean的属性是与getXxx()有关的
1.1通过PropertyDescriptor类操作Bean的属性
通过Introspector类获得Bean对象的
BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的
getter/setter 方法,然后通过反射机制来调用这些方法
public void test1() throws Exception{
Student s = new
Student();
PropertyDescriptor pd = new
PropertyDescriptor("name",Student.class);
Method m =
pd.getWriteMethod();
m.invoke(s,"jack"); //new Student().setName("jack")
m =
pd.getReadMethod();
String name =
(String)m.invoke(s,null); //new
Student().getName()
System.out.println("name="+name);
}
1.2利用内省操作JavaBean的属性
public void test2() throws
Exception{
BeanInfo bi =
Introspector.getBeanInfo(Student.class);
PropertyDescriptor[] pds
= bi.getPropertyDescriptors();
for(PropertyDescriptor
pd : pds){
System.out.println(pd.getName());
}
}
1.3. 衍生出的框架------beanutils工具包
Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写。
Beanutils工具包的常用类:
BeanUtils、ConvertUtils.register(Converter
convert, Class clazz)、自定义转换器 或 内置转换器
默认情况下将java.lang.String->java.util.Date类型会出错
注册类型转换器:register(Converter converter,
java.util.Date.class)
类型转换器: Objectconvert(java.util.Date,
java.lang.String)//查JDK API
自定义的类型转换器:
/*
//参数一:转换规则
//参数二:最终要转换成的类字节码对象
ConvertUtils.register(new
Converter(){
//参数一:最终要转换成的类字节码对象,即java.util.Date.class
//参数二:用户输入的类型,即"2012-02-11"字符串
public
Object convert(Class type, Object value) {
//将String转成java.util.Date类型
if(type!=null
&& type==java.util.Date.class){
if(value
instanceof String){
try
{
String
strBirthday = (String)value;
SimpleDateFormat
sdf = new SimpleDateFormat("yyyy-MM-dd");
return
sdf.parse(strBirthday);
}
catch (ParseException e) {
e.printStackTrace();
}
}
}
return
null;
}
},java.util.Date.class);
*/
利用框架操作JavaBean的属性
ConvertUtils.register(new
DateLocaleConverter(),Date.class);//
Student s = new Student();
BeanUtils bu = new BeanUtils();
bu.setProperty(s, "name", "jack");
bu.setProperty(s, "age", “31");
bu.setProperty(s, "birthday", "1980-7-23");
System.out.println(bu.getProperty(s, "name"));
System.out.println(bu.getProperty(s, "age"));
System.out.println(bu.getProperty(s,
"birthday"));
时间转换:
格林威治-->本地时区
Calendar c = Calendar.getInstance();
c.setTime(person.getBirthday());
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
总结:
1 什么是JavaBean?有何特征?
1)侠义JavaBean:
》公共的构造方法
》私有的字段
》对每个私有的字段提供公共的存取方法
2)广义JavaBean:
》公共的构造方法
》私有的字段
》对每个私有的字段提供公共的存取方法
》N个业务方法
3)存取方法:setUsername()和getUsername()
2 内省API(SUN公司开发)
1)站在反射的角度去操作JavaBean的属性,即存和取
2)属性和如下特性有关:
>>跟getXxxx()有关
>>getXxxx()有返回值
>>每一个JavaBean都会有一个class属性,该属性来自于object
*3 BeanUtils工具(APACHE开源组织开发)
1)BeanUtils工具也具有与内省一至的功能
2)减化了内省操作JavaBean的开发步骤
3)还具有8种基本类型与String之间的自动转化
4)但凡遇到特定的类型转换时,就需要程序员自行编号类型转换器,该转换器一定要在设置代码之前执行才有效
分享到:
相关推荐
`Introspector` 是Java内省的核心类,它提供了一系列的方法来获取关于JavaBean的信息。例如,`Introspector.getBeanInfo(Class)` 方法可以获取指定类的BeanInfo,这包含了关于类的属性(PropertyDescriptor)、事件...
"JAVA的内省机制(introspector)与反射机制(reflection)" JAVA 的内省机制(introspector)和反射机制(reflection)是两个重要的概念,在 JAVA 编程中扮演着至关重要的角色。那么,什么是内省机制和反射机制?它们...
Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。这个特性对于开发人员来说非常有用,因为它允许程序动态地检查和修改对象的状态,而不必了解对象的具体实现细节。...
内省(Introspection)则是Java提供的一种用于获取和修改对象属性的能力,主要通过java.beans包中的Introspector和PropertyDescriptor类实现。它主要用于处理JavaBeans规范的对象,可以获取Bean的属性、事件和方法...
通过使用 `java.beans.Introspector` 类,可以在运行时发现 JavaBean 的属性并进行操作。 在 J2EE 应用中,内省机制常用于框架自动识别 JavaBean 的属性,并根据这些属性进行相应的操作,例如:在容器中自动注入...
### Java中的内省与反射详解 #### 一、引言 在深入了解Java语言的过程中,我们会遇到两个重要的概念:反射和内省。这两种技术在实际开发中有着广泛的应用,尤其是在需要进行动态操作或元数据处理的场景下尤为重要...
讲一些经典的:静态导入 自动装箱/拆箱 增强for循环 可变参数 内省(Introspector) — JavaBean ......
骨干内省者骨干应用程序自省-生成应用程序组件的树状图(使用d3.js)要求骨干应用装有require.js的模块预习 还检查TodirMVC实现的示例目录安装在您的main.js中require ( ['backbone' ,'views/app' ,'routers/router'...
这个包是一个薄包装器,它从内省中检索建议: 安装 使用 Atom 包管理器,它可以在设置视图中找到,或者从命令行运行apm install php-introspector 。 您还需要安装软件包。 用法 目前,自动完成依赖于从远程(或...
Eclipse 平台的 COM 内省器和代码生成器
在Java中,Sun公司提供的内省(Introspection)API,如java.beans.PropertyDescriptor和java.beans.Introspector,虽然强大但确实相对复杂,不便于开发者快速访问和修改Bean的属性。BeanUtils库则通过提供一套更直观...
JavaBeans API提供了一系列的类和接口,如Introspector、PropertyDescriptor、EventSetDescriptor等,用于创建、操作和理解JavaBean的属性、事件和方法。 14.6 JavaBeans的事件处理 事件处理是JavaBeans中的重要...
例如,通过Introspector、BeanInfo和PropertyDescriptor等类,可以方便地获取和设置JavaBean的属性值。 BeanUtils是Apache Commons BeanUtils库的一部分,它提供了一种简单的方式来操作JavaBean的属性,如`...
- 内省:使用Introspector类进行对象属性的获取和设置。 - 注解:理解注解的作用,以及如何自定义注解并配合反射使用。 - 泛型:理解泛型的基本概念,提高代码的类型安全性。 - 代理:学习动态代理和静态代理,...
每个 JavaBean 对象都对应一个 BeanInfo 对象,我们可以通过 Introspector 类的 getBeanInfo 方法来获取 BeanInfo 对象。该方法的底层实现是通过反射来实现的。 BeanInfo 对象提供了多种方法来获取 JavaBean 对象的...
- 例如:使用`Introspector`和`PropertyDescriptor`来获取和设置对象的属性。 ##### 6. 注解 - **注解**提供了一种在源代码中插入元数据的方式,可以被编译器或者运行时环境所使用。 - 例如:`@Override`注解表示...