JavaBean

一、定义:
     把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean。实际上JavaBean就是一个java类,在这个java类中就默认形成了一种规则——对属性进行设置和获得。而反之将说java类就是一个JavaBean,这种说法是错误的,因为一个java类中不一定有对属性的设置和获得的方法(也就是不一定有set和get方法)。
二、从JavaBean中就引出了一个内省的概念
     内省:把一类中需要进行设置和获得的属性访问权限设置为private(私有的)让外部的使用者看不见摸不着,而通过public(共有的)set和get方法来对其属性的值来进行设置和获得,而内部的操作具体是怎样的?外界使用的人不用不知道,这就称为内省。
三、使用内省解释JavaBean中setProperty()和getProperty()方法的实现原理。实际上也是用反射的那一套做法
 
package itcast.Test5;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

/*5、写一个方法,public void setProperty(Object obj, String propertyName, Object value){},
此方法可将obj对象中名为propertyName的属性的值设置为value。*/
//这题中用了内省的简单应用,理解到了JavaBean中setProperty()方法和getProperty()方法的实现
public class SetPropertyTest {

     /**
     * @param args
     */
     public static void main(String[] args) {
          // TODO Auto-generated method stub
          Point pt1 = new Point(3, 5);
          String propertyName = "x";
          Object value = 7;
         
          getProperty(pt1, propertyName);
         
          setProperty(pt1, propertyName, value);
         
          System.out.println(pt1.getX());
     }
     //setProperty()方法的实现
     private static void setProperty(Object object, String propertyName, Object value) {
          try {
               //使用java.beans包中的PropertyDescriptor(属性操作符类)
               PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, object.getClass());
               //通过反射来得到Point这个javabean的set方法
               Method methodSetX = pd2.getWriteMethod();
               methodSetX.invoke(object,value);
          } catch (Exception e) {
               // TODO: handle exception
          }
     }
     //getProperty()方法的实现
     private static void getProperty(Object object, String propertyName) {
          try {
               PropertyDescriptor pd1 = new PropertyDescriptor(propertyName, object.getClass());
               Method methodGetX = pd1.getReadMethod();
               Object retVal = methodGetX.invoke(object);
               System.out.println(retVal);
          } catch (Exception e) {
               // TODO: handle exception
          }
     }

}

class Point {
     private int x;
     private int y;
    
     public Point(int x, int y) {
          super();
          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;
     }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seven的代码实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值