黑马程序员--07.JavaBean--01【JavaBean】【JavaBean的简单操作】
来源:互联网 发布:cn域名一定要备案吗 编辑:程序博客网 时间:2024/05/05 22:55
JavaBean----1
JavaBean基本概念 JavaBean简单操作
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1. JavaBean基本概念
(1). JavaBean定义
[1]. 一个Java类中,如果含有某些方法以get/set开头,并且访问权限是public,则这样的Java类成为JavaBean类。
[2]. JavaBean的set/get方法是供外界调用的。
[3]. JavaBean的作用:用于向外界传递信息
[4]. 在Java EE环境中,很多环境需求使用JavaBean的方式来操作类。
(2). JavaBean特征
[1].方法名符合某种规则的java类就可以看做JavaBean,是一种特殊的Java类。
[2]. 可以对一个JavaBean类作为普通的Java类进行常规的处理么?
可以。可以使用传统的new手段处理,也可以使用反射技术进行处理。
[3]. 一个普通的Java类,可以当做JavaBean类来处理么?
不一定!如果这个类的方法含有某个私有属性的Getter和Setter,就可以当做JavaBean来处理。否则是不可以的。
(3). 通过JavaBean的方法名推断JavaBean的属性名
[1]. step1 去掉JavaBean中方法名的get/set前缀
[2]. step2 剩余部分的跟在首字母的第二个字母是小写,那就将方法名剩余部分的大写的首字母改为小写便推断出这个JavaBean含有的一个属性。
【注意】如果剩余部分的跟在首字母的第二个字母也是大写,这个时候,上面的第二步省去,去掉set/get前缀之后的剩余部分就是这个JavaBean的属性
e.g. 某个JavaBean的方法名setAge( ) ----> 去掉set 获得Age ( A后的g小写) ---->age
所以,age就是这个JavaBean类的一个属性
某个JavaBean的方法名getCPU( ) ----> 去掉get 获得CPU ( C后的P仍是大写)--->CPU就是这个JavaBean类的属性
(4). boolean类型的属性的setter和getter
如果一个属性是boolean类型的变量,它的getter按照JavaBean规定的标准写成isXxx【来替代getXxx】。
替代的原因就是:boolean类型的属性的getter返回值一定是boolean类型的,那么boolean语义本身就表示is( true ) oris not( false)。所以使用isXxx替代getXxx更符合语义
【举例】以下是由MyEclipse自动生成的一个boolean属性的setter和getter。getter由isXxx来取代
public class ReflectPointII { boolean b; // isB()替代getB() public boolean isB() { return b; } public void setB(boolean b) { this.b = b; }}
2. JavaBean简单内省操作
1). JavaBean应用的场景和值对象
[1]. 如果两个模块之间需要传递信息,可以将要传递信息封装到一个自定义JavaBean类中。
[2]. 值对象 (Value Object) :用于为模块间传递信息的JavaBean类的对象称为值对象。
{1}. 需要传递的信息用JavaBean类对象中的私有字段进行存储。
{2}. 通过这些私有字段对应的公有权限setter和getter对这些字段进行设置和读取
2). PropertyDescriptor类
(1). PropertyDescriptor类基本知识
[1]. 所在的包:PropertyDescriptor类位于java.beans包。
[2]. 中文名:属性描述符
[3]. java.beans.PropertyDescriptor描述的事物
PropertyDescriptor类描述了一个JavaBean类通过一对访问符方法[指的是私有属性的setter和getter] 对外暴露的属性
【总结】PropertyDescriptor是对JavaBean类中的属性的抽象
(2). PropertyDescriptor类中构造方法+常用的方法
[1]. 构造方法:
publicPropertyDescriptor(String propertyName, Class<?> beanClass);
{1}. 输入参数1:String propertyName 是String类型的属性名
{2}. 输入参数2:Class<?> beanClass 代表参数1属性名所属的类
{3}. 构造功能描述:为一个遵循Java标准约定(有对应的setter和getter)的属性构建一个PropertyDescriptor类对象。
[2]. 普通方法
对一个非final的JavaBean类的属性,所做的操作无非是设置属性的值或者获取属性的值。
{1}. 获取用于读取属性的方法
public synchronizedMethod getReadMethod();
【注意】如果相应的属性不可读,getReadMethod()方法返回null
{2}. 获取用于设置属性的方法
public synchronized Method getWriteMethod();
【注意】如果相应的属性不可写,getWriteMethod()方法返回null
【技巧】getReadMethod( )和getWriteMethod( )返回值类型都是Method,标志着获取到相应的方法之后,可用反射的方式的来操作这个方法。
(3). 使用PropertyDescriptor类对象读写指定 属性
[1]. 示例JavaBean代码
public class Bean { private int x; private String str; public Bean(int x, String str) { super(); this.x = x; this.str = str; } public int getX() { return x; } public void setX(int x) { this.x = x; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } public void setFlag(boolean flag) { this.flag = flag; }}
[2]. 测试PropertyDescriptor代码
【示例代码】
//获取字段值的方法private static Object getProperty(Object javaBean, String propertyName) throws IntrospectionException,IllegalAccessException, InvocationTargetException{ PropertyDescriptorpd =new PropertyDescriptor(propertyName,javaBean.getClass()); MethodmethodGetX =pd.getReadMethod(); ObjectretVal =methodGetX.invoke(javaBean, null); return retVal;}
private static void setProperty(Bean javaBean, String propertyName,String setValue) throws IntrospectionException,IllegalAccessException, InvocationTargetException {PropertyDescriptor pd =new PropertyDescriptor(propertyName, Bean.class);Method methodSet =pd.getWriteMethod();methodSet.invoke(javaBean,setValue);}
【测试代码】
//实例化JavaBean --- 传统new的方式Bean javaBean =new Bean(1, "Benjamin"); //获取privat int x;的属性值String propertyName ="x";Object retVal = getProperty(javaBean,propertyName);System.out.println("获取属性 x 的取值:"+ retVal); //获取privat String str;的属性值propertyName ="str";retVal =getProperty(javaBean, propertyName);System.out.println("获取属性 str 的取值:"+ retVal); //设置privat String str;的属性值 String setValue ="BenStr";setProperty(javaBean, propertyName,setValue); //获取修改之后的str属性值retVal =getProperty(javaBean, propertyName);System.out.println("获取修改之后属性 x 的取值:"+ retVal);
打印结果:
【注意】涉及到对boolean类型的成员变量进行获取读属性的方法的时候,方法里面使用isXxx或者getXxx都可以,PropertyDescriptor的getReadMethod( )都能正确返回相应的方法。
[3]. 使用PropertyDescriptor类获取没有setter或者getter的字段时候,会抛出异常:
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
- 黑马程序员--07.JavaBean--01【JavaBean】【JavaBean的简单操作】
- 黑马程序员-javaBean的简单内省操作
- 黑马程序员--07.JavaBean--02【JavaBean的复杂内省操作】【第三方类库BeanUtils操作JavaBean】
- 黑马程序员-- 09对于javabean的操作
- 黑马程序员-----JavaBean的内省操作
- JavaBean的简单内省操作
- 黑马程序员-JavaBean
- 黑马程序员-java-JavaBean
- 黑马程序员-javabean
- 黑马程序员---内省JavaBean
- 黑马程序员—javabean
- 黑马程序员--什么是javaBean?
- 黑马程序员-javaBean
- 黑马程序员:JavaBean
- 黑马程序员---JavaBean & 内省
- 黑马程序员-JavaBean
- 黑马程序员_day33-JavaBean
- 黑马程序员-高新技术-JavaBean
- 统计文本文件中的单词个数(改进版)
- 设计模式学习--复合模式(Compound Pattern)
- 谈VC++对象模型
- WindowsXP下的IPv6配置
- tpfancontrol v062 for Thinkpad T410i 配置文件
- 黑马程序员--07.JavaBean--01【JavaBean】【JavaBean的简单操作】
- hdu 4046 Panda 解题报告
- 数据库的设计和原则
- Collections
- android Button 切换背景,实现动态按钮和按钮颜色渐变
- linux内核SYSCALL_DEFINE分析
- ehcache 缓存的使用
- 【COM学习】之一、QueryInterface
- c++学习之操作符重载