`

解密:普通JavaBean的Property(域/类变量)的命名规则

    博客分类:
  • Java
阅读更多



1、背景

本文讲的普通JavaBean只是一个拥有Property(域/类变量)及其setter/getter的普通Java类。

有一定Java开发经验的人可能会知道,普通JavaBean的Property(域/类变量)的命名不能采用以下形式:aA***或者Aa***,如:"aDdress"或"Address",否则,在web应用中会报无法找到这个Property(因为根据"规则",需要找的是"ADdress"或"address")。但对于其中的原因,一般人都不明白,难道这是Sun公司当初定的规范吗?

Java开源以后,我们终于可以解开其中的谜:

 

2、普通JavaBean处理涉及到相关类

在web应用中,Servlet容器或者EJB容器一般会使用java.beans包中的类来加载这些JavaBean。

BeanInfo(接口)
   |
SimpleInfo(类)
   |
GenericBeanInfo(类)

GenericBeanInfo是JavaBean数据装载类。
Introspector是JavaBean处理中最重要的一个处理类。
另外的一些辅助类,就不一一列举了。

 

3、解密

3.1 开始

在应用中,我们通常会用以下代码来获取一个普通JavaBean相关的信息:
BeanInfo mBeanInfo = null;
try {
 mBeanInfo = Introspector.getBeanInfo(Person.class);
} catch (IntrospectionException e) {
 e.printStackTrace();
}

3.2 深入
在Introspector类的getBeanInfo方法中,我们发现其中与Property处理相关的行:
private GenericBeanInfo getBeanInfo()
        throws IntrospectionException {
        ……
        PropertyDescriptor apropertydescriptor[] = getTargetPropertyInfo();
        ……
    }

3.3 继续深入
在Property处理方法中,我们发现其处理方式是根据getter/setter的方法来得到Property(域/类变量)
private PropertyDescriptor[] getTargetPropertyInfo() throws IntrospectionException{
   ……
 if(s.startsWith("get")) obj = new PropertyDescriptor(decapitalize(s.substring(3)), method, null);
 ……
}

3.4 关键
接下来,最关键的就是下面这个方法:
 public static String decapitalize(String s)
    {
        if(s == null || s.length() == 0)
            //空处理
            return s;

        if(s.length() > 1 && Character.isUpperCase(s.charAt(1)) && Character.isUpperCase(s.charAt(0))){
            //长度大于1,并且前两个字符大写时,返回原字符串
            return s;
        } else{
            //其他情况下,把原字符串的首个字符小写处理后返回
            char ac[] = s.toCharArray();
            ac[0] = Character.toLowerCase(ac[0]);
            return new String(ac);
        }
    }

4 Ending
解密完成。
明白真相,才会解开心中的锁——其实很简单。

 

 

1
0
分享到:
评论
2 楼 lovejavaei 2009-07-03  
说简单一点,就是根据方法名去掉set或get,然后巴蒂一个字符变成小写
1 楼 tohzf 2009-07-03  
不错,分析得挺好的

相关推荐

    JavaBean技术

    1. **非final类**:JavaBean类应该是非final的,这样其他类可以通过继承的方式来扩展JavaBean的功能。 2. **序列化**:JavaBean应该直接或间接实现`java.io.Serializable`接口,以便能够通过网络传输或持久化到磁盘...

    XStream在JavaBean与XML/JSON 之间相互转换

    **XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...

    JavaBean/JSP/Servlet 的商品数据库增删改查

    JavaBean通常遵循一定的命名规则和设计模式,例如提供getter和setter方法来访问和修改属性值,以及构造函数用于初始化对象。 JSP则是一种用于创建动态网页的技术,它允许将Java代码嵌入到HTML或XML文档中。在商品...

    JavaBean的作用域.doc

    JavaBean是Java编程中一种特殊类型的类,它遵循一定的规范,主要用于封装数据和业务逻辑,以便在Java Web应用程序中重用。JavaBean的作用域是指它在应用程序中的可见性和生命周期,通常有四个不同的作用域:Page、...

    JSP之访问JavaBean的一个简单例子

    JSP之访问JavaBean的一个简单例子 使用useBean,jsp:setProperty,jsp:getProperty使用的一个简单例子 博客参考地址:https://blog.csdn.net/qq_36631076/article/details/79693890

    jsp中使用javabean的两点注意事项

    在JSP页面中访问JavaBean的属性时,需要遵循特定的命名和大小写规则,否则会遇到属性找不到的错误。 #### 错误案例分析 当使用`<jsp:getProperty>`和`<jsp:setProperty>`标签时,如果属性名的大小写不匹配JavaBean...

    JavaBean及内省文档

    这些方法需遵循特定的命名规则,如 `getName()` 和 `setName(String name)`。 #### 二、JavaBean 属性详解 JavaBean 的属性可以是任意类型,并且一个 JavaBean 可以拥有多个属性。为了方便访问这些属性,通常会为...

    黑马程序员-----javaBean的操作类学习笔记

    - **命名规则**:通常,JavaBean的类名应该以"Bean"结尾,例如`UserBean`。 - **公共无参构造器**:JavaBean需要提供一个公共的无参数构造函数,以便于实例化。 - **封装属性**:JavaBean中的属性应通过getter和...

    BBS.rar_MVC模式BBS论坛_bbs jsp_javabean_jsp/servlet BBS_servlet BB

    JavaBean是一种符合特定规范的Java类,通常用于封装数据和简单业务逻辑。在BBS论坛中,JavaBean可能包含用户信息、帖子对象等,它们在控制器和视图之间传递数据。 **BBS论坛功能实现:** 基于上述技术,BBS论坛可能...

    javaBean/Log验证

    javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证

    模式一:jsp+javaBean

    jsp+javaBean登陆参考 博文链接:https://shangdiyefankun.iteye.com/blog/129545

    java持久化工具类:JavaBean与XML

    JavaBean是一种符合特定规范的Java类,它代表了业务对象,并提供了封装属性的方法。而XML则是一种结构化数据格式,常用于数据交换和配置文件。 JavaBean持久化通常通过序列化实现,序列化是将Java对象转换为字节流...

    基于java web晚上书城系统的设计与实现

    用户类型:双角色(普通用户和管理员) 设计模式:MVC(jsp+servlet+javabean) 项目架构:B/S架构 开发语言:Java语言 主要技术:mvc、jdbc、jsp、bootstrap、html5、css、js、jquery等技术 运行环境:win7/win10/jdk...

    JavaBean和beanutils工具类的学习

    JavaBean是一种规范,用于创建可重用的组件,它的核心特点是在类中定义私有成员变量,并提供对应的getter和setter方法来访问和修改这些变量。 首先,JavaBean的规范要求: 1. 类是公共的(`public`)。 2. 提供无...

    Java试题-6:JavaBean的应用

    问题描述:存在一个JavaBean,它包含以下几种可能的属性: 1.boolean/Boolean 2.int/Integer 3.String 4.double/Double 属性名未知, 现在要给这些属性设置默认值, 以下是要求的默认值:String类型的默认值为字符串 ...

    基于Java web的图书管理系统

    设计模式:MVC(jsp+servlet+javabean) 项目架构:B/S架构 主要技术:mvc 、java、jsp、bootstrap、html5、css、js、jquery等技术 运行环境:win7/win10/jdk1.8 运行工具:eclipse/Myeclipse,eclipse最兼容 数 据...

    javabean组件程序设计.pptx

    - 类名通常符合驼峰命名法,且类的成员变量和方法的访问修饰符应为public,以便外部访问。 - 构造方法通常是public的,且最好有一个无参构造方法供实例化使用。 - 对于boolean属性,可以使用`is`开头的getter,如...

    java 基础之JavaBean属性命名规范问题.docx

    ### JavaBean属性命名规范 JavaBean是一种遵循特定编码标准的Java类,主要用于封装数据或表示简单的数据载体。在JavaBean中,属性的命名规范是非常重要的,因为它直接影响到代码的可读性和可维护性,同时也会影响到...

Global site tag (gtag.js) - Google Analytics