---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
内省--〉了解JavaBean
内省对应的单词为IntroSpector主要是对JavaBean进行操作
什么叫JavaBean?
JavaBean是一个特殊的Java类,这个特殊的Java类里的某些方法,符合某种特定的命名规则,
如果一个Java类中的一些方法符合某种命名规则,则可以把它当作JavaBean来使用
问题:我们可不可以把JavaBean就当作是一个普通的Java类对它进行编程,进行操作?
可以,反正是一个Java类,那么我就new它,用反射操作它。
问题:我们可不可以把Java类当作JavaBean来使用?、
不一定,我们要看,它有没有get,和set方法,如果有,我就可以把它当作JavaBean来操作
一个类,如果它的有些方法是以set和get打头那么我们就可以把它当作JavaBean来使用
class Person{
private int age;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
JavaBean的方法名去掉set和get剩下来的就是属性名
Age-->如果第二个字母是小的,则把第一个字母变成小的-->
gettime-->time
setTime-->time
getCUP-->CPU
对JavaBean的简单内省操作:
一个符合JavaBean特点的类可以当作普通类进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,
我们才会去了解和应用JavaBean,好处如下:
1.在JavaEE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人
都这么用和要求这么做,那你就没什么挑选的余地!
2.JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来
访问私有的x,怎么做?用内省这套api操作JavaBean比用普通类的方式更方便。
在MyEclipse中生成get和set方法的快捷键:
Alt+Shift+s R
//创建一个point类
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
public class 内省JavaBean {
public static void main(String[] args) throws Exception {
//创建Point对象
Point point=new Point(3,5);
//用内省的方法来操作
String propertyName="x";
PropertyDescriptor pros=new PropertyDescriptor(propertyName,point.getClass());
Method met=pros.getReadMethod();
Object retVal=met.invoke(point);
System.out.println(retVal);
Method met2=pros.getWriteMethod();
met2.invoke(point,7);
System.out.println(point.getX());
}
}
采用便利BeanInfo的所有属性方式来查找和设置某个RefectPoint对象的x属性
在程序中把一个类当作JavaBean来看,就是调用IntroSpector.getBeaninfo方法
得到的Beaninfo对象封装了吧这个类当作JavaBean看的结果信息。
//在 point类 上进行内省,了解其所有属性、公开的方法和事件。
BeanInfo beanInfo=Introspector.getBeanInfo(point.getClass);
//获得point类内的所有方法 返回的是一个方法的集合
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
//然后对这个方法集合进行迭代
Object retVal=null;
for(PropertyDescriptor pd:pds){
//如果的迭代出来的属性名与我传进来的属性名propertyName相同
if(pd.getName().equals(propertyName)){
Method met2=pd.getReadMethod();
retVal=met2.invoke(point);
break;
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------