</pre><h2><span style="font-size:18px;"></span><pre name="code" class="java">
一.内省
内省的英文单词为IntroSpecter,意思是检查、视察、体检之意,对于程序即对内部进行检查,了解更多的底层细节。
内省的作用重要是针对JavaBean进行操作;
二.JavaBean
1、简述:
1)JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法符合某种特殊的命名规则。
2)它是一种特殊的Java类,其中的方法符合特殊的规则。只要一个类中含有get或is和set打头的方法,就可以将其当做JavaBean使用。
3)字段和属性:
字段就是我们定义的一些成员变量,如private String name;等
JavaBean的属性是根据其中的setter和getter方法来确定的,而不是依据其中的变量,如方法名为setId,则中文意思是设置Id,getId也是如此;去掉set或者get前缀,剩余部分就是属性名称。 如果剩余部分的第二个字母小写,则把剩余部分改为小写。如:getAge/setAge-->age;gettime-->time;setTime-->time;getCPU-->CPU。
总之,一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。
2、组成:
一个JavaBean由三部分组成:
(1) 属性(properties);
(2) 方法(method);
(3) 时间(event);
3、作用:
如果要在两个模板之间传递多个信息,可将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO),这些信息在类中用私有字段来储存,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。
4、使用JavaBean的好处:
1)在Java EE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和要求这么做,那你就没什么挑选的余地!
2)JDK中提供了对JavaBean进行操作的API,这套API称为内省,若要自己通过getX的方式来访问私有x,可用内省这套API,操作JavaBean要比使用普通的方式更方便。
举例:
package cn.itcast.day1;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.ObjectInputStream.GetField;
import java.lang.reflect.Method;
public class IntroSpector {
public static void main(String[] args) throws Exception{
FieldReflex fr = new FieldReflex(3, 5);
String propertyName = "x";
//普通内省方法获取x
PropertyDescriptor pd = new PropertyDescriptor(propertyName, fr.getClass());
//获取getX方法
Method methodGetX = pd.getReadMethod();
Object retval = methodGetX.invoke(fr);
System.out.println(retval);
//复杂内省方法设置x
BeanInfo beanInfo = Introspector.getBeanInfo(fr.getClass());
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
//在pds集合中迭代获取setX方法并调用
for(PropertyDescriptor pd1 : pds){
if(pd1.getName().equals(propertyName)){
Method methodSetX = pd1.getWriteMethod();
methodSetX.invoke(fr, 7);
System.out.println(fr.getX());
break;
}
}
}
}