java之 内省
来源:互联网 发布:城市轨道交通大数据 编辑:程序博客网 时间:2024/05/16 07:21
------- android培训、java培训、期待与您交流! ----------
内省(IntroSpector)这个类是用来操作JavaBean操作的类。
那么什么是JavaBean呢?JavaBean其实就是一种用于进行数据传递的类,这些数据封装在私有的成员变量中,通过符合规则的方法,来设置和获取这些私有变量。
因为通常要在模块之间是用JavaBean来传递数据,那么我们也把JavaBean的实例对象成为值对象(Value Object)简称VO。
在JavaBean中的方法的规则一般是:
如果属性的名为:private int age 那么 设置和获取的它值的方法为:setAge(int age) int getAge()
如果属性的名为:private String NAME 那么设置和获取它值的方法为: setNAME(String name) String getNAME()、
因为JavaBean中的属性都是私有的,因此我们只能够通过这种符合规则的方法来判断这个属性的名称
我们可以利用PropertyDescriptor类来进行方便的操作JavaBean类:
这个类是用来描述JavaBean中的属性的。具体看下面例子。
例如有个person类 我们当初JavaBean类来看待:
public class person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
}
public class IntroSpectorTest1 {
public static void main(String[] args)throws Exception{
person p=new person();
String fieldName="name";
showProperty(p, fieldName);
}
private static void showProperty(person p, String fieldName)
throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
//它的构造方法中要求传入的参数为:当做JavaBean类来看待的类中的属性名称,第二个参数为这个JavaBean类的Class对象
PropertyDescriptor pdp=new PropertyDescriptor(fieldName,p.getClass());
//通过这个属性获取到设置这个属性的方法
Method mtd=pdp.getWriteMethod();
mtd.invoke(p, "小明");
//获取到获取这个属性值的方法
Method mtd1=pdp.getReadMethod();
//打印这个属性值。
System.out.println(mtd1.invoke(p));
}
}
此外我们还可以使用:IntroSpector类的getBeanInfo()方法来获取到BeanInfo对象。
这个BeanInfo是用来描述将这个JavaBean类的结果。
例如:还是这个person类:
public class IntroSpectorTest1 {
public static void main(String[] args)throws Exception{
person p=new person();
//下面将person类当做JavaBean来看待
String fieldName="name";
//showProperty(p, fieldName);
//通过IntroSpector的getBeanInfo方法获取到BeanInfo对象
BeanInfo beaninfo=Introspector.getBeanInfo(p.getClass());
//通过这个BeanInfod对象获取到这个JavaBean类的所有属性
PropertyDescriptor[] pdps=beaninfo.getPropertyDescriptors();
for(PropertyDescriptor pdp: pdps){//遍历这个JavaBean类中的所有属性
if(pdp.getName().equals(fieldName)){//如果是自己所需要的属性那么就操作
Method mtd=pdp.getWriteMethod();
mtd.invoke(p, "小明");
Method mtd1=pdp.getReadMethod();
System.out.println(mtd1.invoke(p));
break;
}
}
}
另外还可以使用BeanUtils工具将更加简便:
例如:
person p=new person();
//下面将person类当做JavaBean来看待
person p=new person();
//showProperty(p, fieldName);
//showBeanInfo(p, fieldName);
//通过BeanUtils的静态方法设置某个对象的某个属性的值
BeanUtils.setProperty(p,"name","小明");
//获取指定对象的指定属性的值
System.out.println(BeanUtils.getProperty(p, "name"));
//通过BeanUtils的静态方法设置某个对象的某个属性的值
BeanUtils.setProperty(p,"age","12");//注意这个方法是使用字符串的形式赋值。
//获取指定对象的指定属性的值
System.out.println(BeanUtils.getProperty(p, "name"));//这个方法也是按照字符串的形式获取值
此外BeanUtils还有复合属性赋值和获取的功能。
复合属性就是,这个属性是一个对象,这个属性的类型也是一个对象,例如:Date dd =new Date();
这个dd就是个复合属性,因为它的类型是date Date类中有个setTime的方法,复合javaBean的格式,
因此可以为Date类的time属性赋值。
person p=new person();
格式例如: BeanUtils.setProperty(p,"dd.time","999");
- java基础之内省
- java之 内省
- Java之内省机制
- java之内省
- java基础之内省
- java之内省技术
- java 之 内省(JavaBean操作)
- java之反射和内省
- Java高新技术之JavaBean(内省 IntroSpector)
- Java基础加强之内省(introspector)
- Java基础加强之内省(introspector)
- Java高新技术之内省与JavaBean
- 基础加强学习之Java内省机
- 黑马程序员---java高新技术之内省
- 黑马程序员之Java中的内省
- Java之反射、枚举、内省、注解
- 【java反射之】对javabean内省操作
- JAVA基础之内省与反射
- VBScript的读写文件操作
- 第十三周项目五:字符串操作1.3
- java入门基础总结
- RavenScheme简介
- OpenCV参考手册之CvCapture结构体
- java之 内省
- 淘到一款ThinkPad
- HTTP协议简介1
- 第十二周项目3-4
- MySQL存储过程游标(cursor)示例
- Maven学习:常用命令
- CCD和CMOS的的相同点和差异
- 布局技巧:使用ViewStub
- 【软件工程】软件开发精打细算——可行性研究