`

关于 JavaBean 规范你还是应该知道的二三事

    博客分类:
  • JAVA
 
阅读更多

作为 Java 程序员,对于 JavaBean 也许你会说再熟悉不过了,它贯穿在系统的多层中,不同的叫法有 PO、VO、DTO、POJO、DO(Domain Object)。然而它无外乎就是一个 Class 类,带上些属性和它们的 setter/getter 方法,set/get 后面那一个字母大写。虽然我们现在很少把 JavaBean 与那个古老的 2.0 的EJB 搞混,但为什么明明用 IDE 为属性生成的 getter/setter 方法,应用一运行,还是报找不到某个 bean 属性的 setter 或 getter 方法呢?

要知道,在 Sun 的网站上那个关于 JavaBean 规范的 PDF 文档可是有足足实实的 114 页啊。难免有些规则有点古怪,至使知名的 IDE 都难以应对,所以我们还是有必要了解其中二三,来规范我们的 JavaBean 和解释一些情形。

Sun 的关于 JavaBean 规范见:http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html ,其中可下载到 JavaBean 规范的 PDF 文档。


实际中的问题


首 先,当然还是要说它的属性及 setter/getter 方法。属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。多数情况是对的,且当前流行的 IDE(Eclipse、JBuilder) 也都认这个死理,这里 NetBean 值得表扬一下。但要是碰到些遗留的代码中属性名不规范,或者有些人就是顽固,或真是对属性命名犹豫不决时的写下的代码时,那还是有得你研究一下。

这里来看看 Eclipse 为几个属性生成的 getter/setter 方法吧:

sName(从 C 转过来的,受匈牙利的影响,认为 Name 是个字符串,所以加个前缀 s) getSName()/setSName(String name)
URL (平时认为是缩略语/专有名词,理当全部大写,这在我们对待 ID 时经常发生的)getURL()/setURL(String url)

上 面第一个由 Eclipse 为我们生成的 getSName()/setSName(String name)方法,参照 JavaBean 规范来说,其实是错误的。如果出现这样的方法,放到我们的标签(像 Struts 标签,如 <s:textfield name="sName"/>),或是进行 Hibernate/iBatis 那种映射时,你就能收到报 找不到 sName 属性相应的 getter/setter 方法 那样的错误。不是明明有 getSName() 和 setSName(String name),可是方法名错了,正确的版本应该是 getsName() 和 setsName(String name)。

前面首先解释了属性命名不规范产生问题的原因,现在就来更仔细的了解关于 JavaBean 属性及其 getter/setter 方法的约定,有些是硬性的。


属性与存取访问的规定


为 JavaBean 创建属性时,必须牢记:缩略语通常被视为一个独立的单词,而不是单个字母。例如,URL 对应的属性名应该用 url,相应的 getUrl()/setUrl(),所以 ID 还是用 id 作为属性吧,相应的 getId()/setId()。

规 范中另一个特别的地方就是,第二个字母为大写的属性名要区别对待。如果属性名的第二个字母是大写的,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。这就是为什么 sName 对应的存取方法是 getsName()/setsName() 的原因,不能不说这条规则很令人费解。那就更有必要看看下面表格的规范:

属性名/类型 getter 方法 setter 方法
xcoordinate/Double public Double getXcoordinate() public void setXcoordinate(Double newValue)
xCoordinate/Double public Double getxCoordinate() public void setxCoordinate(Double newValue)
XCoordinate/Double public Double getXCoordinate() public void setXCoordinate(Double newValue)
Xcoordinate/Double 不允许 不允许
student/Boolean public Boolean getStudent() public void setStudent(Boolean newValue)
student/boolean public boolean getStudent()
public boolean isStudent()
public void setStudent(boolean newValue)


属 性是首字母大写,次字母小写是,你永远都找不到它的 getter/setter 方法的,对这个属性的使用是会害人的。对于 boolean 类型属性的 getter 方法是 isXxx() 还是 getXxx() 就自己决定了,isXxx() 应该更接近于自然语言,更顺溜些。

知道了属性及存取方法的规定,那么你即使是面对古老代码,在使用标签来引用或与 Hibernate/iBatis 等进行映射,你就知道该填什么样的属性名了。

还有一个我们很少碰触到的是关于可索引属性的 getter/setter 方法(这方面 C# 表现的比 Java 要优秀),比如有属性

private OrderItem[] orderItem; 那它相应的 getter/setter 除常见的两个外,还有带索引参数的两个版本,如下:

public OrderItem[] getOrderItem();
public void setOrderItem(OrderItem[] newArray);
public OrderItem[] getOrderItem(int index);
public void setOrderItem(int index, OrderItem orderItem);


关于 Bean 导航


最后就是 Bean 导航的规范,通常用点记法(dot notation) 来引用属性,同时也要注意索引属性的访问。在 Web MVC 的表单中,以及标签中, Jarkata-Commons-BeanUtils 中用得很多。看点记法的示例:

Java 代码 点记法
anOrder.getAccount().getUsername() anOrder.account.username
anOrder.getOrderItem().get(0).getProductId() anOrder.orderItem[0].productId
anObject.getId() anObject.id
anObject.getxCoordinate() anObject.xCoordinate


上表应该从右往左边看,点记法中的属性名运行时要被解析成相应的存取方法调用。比如像 Struts1 标签:

<
html:text
property = "stocks[1].code" />

会显示出 FormBean 中 stocks 列表的第二个元素的 code 属性,提交就填充到相应的位置上去。

分享到:
评论

相关推荐

    javabean规范

    5. **JDK中的示例**:许多JDK提供的类,如`String`,都遵循JavaBean规范。 JavaBean 的主要优点在于其便利性,它可以方便地进行属性的存取、序列化、以及在各种Java框架中的使用,例如在Spring框架中作为模型对象...

    JavaBean规范.jpg

    JavaBean规范.jpg

    JAVABEAN

    标签"JAVA javabean"进一步强调了这个项目与Java语言和JavaBean规范的紧密关系。这意味着开发者可能使用了标准的Java技术栈,包括Servlet、JDBC、JSP等,来配合JavaBean构建BBS系统。JavaBean可以作为模型层(Model...

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

    #### 三、JavaBean属性命名规范的重要性 1. **提高代码可读性**:统一的命名规范有助于提高代码的可读性,使得开发者能够更容易地理解和维护代码。 2. **增强代码兼容性**:遵循标准命名规范可以确保JavaBean能够与...

    javabean规范.doc

    JavaBean 是一种遵循特定编程规范的 Java 类,它主要用于封装数据和提供数据访问方法。JavaBean 不是 Java 语言中的语法规定,而是一种约定俗成的习惯。有时,JavaBean 类也被称作 POJO(Plain Old Java Object),...

    JavaBean示例

    JavaBean是Java编程语言中的一种特定类,遵循特定的规范,用于封装数据并提供属性访问。这个"JavaBean示例"旨在帮助初学者理解和使用JavaBean。JavaBean主要用于构建Java应用程序的可重用组件,特别是在JavaServer ...

    SqlToJavaBean_javabean_根据表结构生成javabean_生成javabean_

    描述中提到"根据数据表结构自动生成javabean,需JDK1.7以上版本",这意味着该工具或库支持Java 7及更高版本的特性,并且其核心功能是解析数据库表的信息,然后根据这些信息动态生成符合JavaBean规范的源代码。...

    JavaBean开发用户注册页面.pdf

    JavaBean开发规范可以确保JavaBean的可重用性、可维护性和可扩展性。 2. JSP与JavaBean之间的数据传输 JavaBean开发用户注册页面需要使用JSP与JavaBean之间的数据传输,通过JSP页面将用户输入的数据传递给JavaBean...

    JSP课件-javabean的使用教程

    在提供的课件中,有三个关于JavaBean的PPT文件: 1. **第五章 JavaBean1.ppt**:可能涵盖了JavaBean的基本概念、创建过程和基本操作。 2. **第五章 JavaBean3.ppt**:可能深入讲解了JavaBean的属性、方法以及在JSP中...

    JavaBean课件.rar

    JavaBean是Java编程语言中的一种特定类型,它遵循一套特定的规范,被设计用来作为Java应用程序中的可重用组件。...无论是初学者还是经验丰富的开发者,深入理解JavaBean都能为你的编程生涯增添价值。

    javabean源码

    JavaBean是一种特殊的Java类,它遵循一定的规范,用于封装...这个名为“javabean”的压缩包文件,很可能是为了帮助你学习和实践JavaBean的编写和使用,通过阅读和分析其中的源码,你可以进一步深化对JavaBean的理解。

    javabean留言小项目

    1. **JavaBean规范** - **可见性**:JavaBean中的属性通常为私有(private),通过公共(public)的getter和setter方法来访问和修改这些属性。 - **无参构造器**:JavaBean需要提供一个无参数的构造器,以便于实例...

    JavaBean组件程序设计

    1. **JavaBean规范**: - **可见性**:JavaBean通常使用公共属性和方法,属性通过getter和setter方法进行访问。 - **无参数构造器**:JavaBean需要有一个无参数的构造器以便于实例化。 - **序列化**:为了能够...

    javabean的自动生成

    - **第二步**:右键选择表,然后在弹出菜单中选择“Generate Java Beans”,这会打开一个配置窗口,允许你设置生成的JavaBean的相关选项,如包名、类名、生成的字段类型等。 - **第三步**:确认配置后,MyEclipse...

    javaBean简介.doc

    JavaBean 是 Java 编程语言中的一种特殊类,它遵循特定的编程规范,主要用于封装数据和实现业务逻辑。在MVC(Model-View-Controller)设计模式中,JavaBean 作为 Model 层,是应用程序的数据载体。在传统的Web开发中...

    JavaBean_Javabean增删改查_audiencevu9_

    JavaBean是Java编程中的一种重要概念,主要用于封装数据和业务逻辑,它遵循一定的规范,使得Java对象能够被方便地在Web应用中使用,特别是在Servlet和JSP之间传递数据。在这个项目"JavaBean_Javabean增删改查_...

    javabean(DB)

    - **单一职责原则**:JavaBean应该只有一个明确的责任,避免混合业务逻辑和数据。 - **开闭原则**:对扩展开放,对修改关闭,JavaBean的设计应易于扩展而无需改动已有代码。 8. **JavaBean的局限性** - **过度...

    java自学==javabean实例

    1. **公共类(Public Class)**:JavaBean应该是一个公开的类,没有访问修饰符或用public修饰,以便在不同包中可以被访问。 2. **无参构造器(Default Constructor)**:JavaBean需要提供一个无参数的构造器,使得...

    JavaBean讲解(上)

    JavaBean是Java编程语言中的一种特定类,它遵循一套特定的规范,主要用于封装数据和提供对象间的交互。在Java世界里,JavaBean被广泛应用于构建组件、MVC框架以及持久化层等领域。本节我们将深入探讨JavaBean的概念...

    javabean 学习(适合初学者)

    4. **标准接口**:JavaBean 遵循一定的命名约定和标准接口规范,这使得它们可以被其他 Java 组件轻松识别和使用。 #### 三、JavaBean 的作用 1. **简化开发**:通过提供预定义的行为和属性,JavaBean 可以帮助...

Global site tag (gtag.js) - Google Analytics