`
把阳光剪成雨Java
  • 浏览: 24036 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

黑马程序员——内省

 
阅读更多

                 ----------------- android培训java培训、期待与您交流! -----------------

 

内省

1.  JavaBean

package introSpector;

public class IntroSpectorDemo {

    // javaBean符合特殊格式的类。 方法的名字以get或者set开头

//  通过getset方法判断属性。

//  Age-->如果第二个字母是小的,则把第一个字母变成小的-->age

//  gettime-->time

//  getCPU-->CPU

//  setTime-->time

//  getCpU-->cpU

 

    public static void main(String[] args) {

      

    }

/*一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,我们才会去了解和应用JavaBean!好处如下:

Java EE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和要求这么做,那你就没什么挑选的余地!

JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来访问私有的x,怎么做,有一定难度吧?用内省这套api操作JavaBean比用普通类的方式更方便。

*/

}

 

2.  内省的综合案例

 

private static void method2() throws Exception {

//     BeanInfo代表了 java类的细节。

       BeanInfo beanInfo = Introspector.getBeanInfo(ReflectPoint.class);

       PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

       String popertyName=null;

       ReflectPoint p = new ReflectPoint(11, 2);

       for(PropertyDescriptor pd:pds){

           if(pd.getName().equals(popertyName)){

              Method method1 = pd.getReadMethod();

              String retVal = (String) method1.invoke(p);

              System.out.println(retVal);

           }

       }

    }

 

    private static void method1() throws IntrospectionException,

           IllegalAccessException, InvocationTargetException {

       //     通过PropertyDescriptor获取属性的基本信息。内部用了反射。

              ReflectPoint p = new ReflectPoint(6, 7);

              PropertyDescriptor pd = new PropertyDescriptor("x",ReflectPoint.class);

              Object retVal = pd.getReadMethod().invoke(p);

              System.out.println(retVal);

             

              pd.getWriteMethod().invoke(p, 8);

              System.out.println(p.getX());

}

 

 

3.  BeanUtils工具包

演示用eclipse如何加入jar包,先只是引入beanutils包,等程序运行出错后再引入logging包。

在前面内省例子的基础上,用BeanUtils类先get原来设置好的属性,再将其set为一个新值。

get属性时返回的结果为字符串,set属性时可以接受任意类型的对象,通常使用字符串。

PropertyUtils类先get原来设置好的属性,再将其set为一个新值。

get属性时返回的结果为该属性本来的类型,set属性时只接受该属性本来的类型。

演示去掉JavaBeanReflectPoint)的public修饰符时,BeanUtils工具包访问javabean属性时出现的问题。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics