黑马程序员------javaBean

Java基础知识增强------javaBean

                          http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训、期待与您交流!

 

一、概述

javaBean是一种特殊的java类,主要用于传递数据信息,这种java类中的方法主要用于

访问私有的字段,且方法名称符合某种命名规则。

如果两个模块之间传递多个参数信息,可以将这些信息封装到一个javaBean中,这种javaBean的实例对象通常称之为值对象(Value Object,简称VO)。这种信息在类中用私有字段来存储,如果读取或设置这些字段值,则需要通过一些相应的方法来访问,javaBean

的属性石根据其中的Settergetter方法来确定的,而不是根据其中的成员变量。

如果方法名称为setId中文意思为设置ID值,如果方法名称为getId,中文意思为获得ID

值,去掉set前缀剩余部分就是属性名,如果剩余部分第二个字母是小写,则把剩余的部分首字母改为小写。

setId()的属性—>id

isLast()的属性名0>last

setCPU的属性名—>CPU

总之,一个类被当作javaBean使用时,javaBean的属性石根据方法名推断出来的,它

根本看不到java类内部的成员变量。

一个符合javaBean特点的类可以当作一个普通类进行使用,但把它当作javabean用肯

肯定需要带来想二外的好处。好处:

javaEE开发中,经常要使用到javaBean,很多环境就要按javaBean方式进行操作,别人都这么用和要求这么做。

JDK中提供了对javaBean进行操作的一些API,这套API就称为内省。如果要你

自己去通过getX方法来访问私有的x,用内省这套API操作javaBean比用普通类的

方式更方便。

内省对应的英文名称为IntroSpector,它主要用于对javaBean进行操作,javaBean

是一种特殊的java类,其中的某些方法符合某种命名规则,如果一个java类中的一些方法符合某种命名规则,则可以吧它当作javaBean来使用,

二、代码示例:

1.使用new 一个PropertyDescription 对象的方式来实现对javaBean API的调用。

package ClassDemo;

import java.beans.*;

import java.lang.reflect.*;

public class Inspector {

/**

 * @param args

 * 通过属性描述获取和设置javaBean的属性与方法调用

 */

public static void main(String[] args) {

Person  person1 = new Person("n", 29, "1356");

        String  propertyName = "name";

javaBeanOperator(person1, propertyName);

}

private static void javaBeanOperator(Person obj, String propertyName) {

try {

PropertyDescriptor  pDescriptor = new PropertyDescriptor(propertyName, obj.getClass());

Method  method =pDescriptor.getWriteMethod();

try {

method.invoke(obj, "cang");

Method  method2 = pDescriptor.getReadMethod();

Object  object = method2.invoke(obj);

System.out.println(object);

 

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (IntrospectionException e) {

throw new RuntimeException();

}

}

} 

2.采用遍历BeanInfo的所有方式来查找和设置某个person对象的name属性,在程序中把一个类当作javaBean来看,就是调用InstroSpector.getBeanInfo方法,得到的BeanInfo

对象封装了把这个类当作JavaBean看的结果信息。

部分代码:

private static void javaBean(String propertyName, Object obj) {

try {

BeanInfo  bInfo = Introspector.getBeanInfo(obj.getClass());

PropertyDescriptor [] pDescriptors = bInfo.getPropertyDescriptors();

for(PropertyDescriptor  ps : pDescriptors){

if((ps.getName()).equals(propertyName)){

Method  method  =ps.getWriteMethod();

try {

method.invoke(obj, "jsl");

System.out.println(ps.getReadMethod().invoke(obj));

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

} catch (IntrospectionException e) {

throw new RuntimeException();

}

}


 

你可能感兴趣的:(黑马程序员)