- 浏览: 1658319 次
- 性别:
文章分类
- 全部博客 (2929)
- 非技术 (18)
- Eclipse (11)
- JAVA (31)
- 正则表达式 (0)
- J2EE (4)
- DOS命令 (2)
- WEB前端 (52)
- JavaScript (69)
- 数据库 (8)
- 设计模式 (0)
- JFreechart (1)
- 操作系统 (1)
- 互联网 (10)
- EasyMock (1)
- jQuery (5)
- Struts2 (12)
- Spring (24)
- 浏览器 (16)
- OGNL (1)
- WebService (12)
- OSGi (14)
- 软件 (10)
- Tomcat (2)
- Ext (3)
- SiteMesh (2)
- 开源软件 (2)
- Hibernate (2)
- Quartz (6)
- iBatis (2)
最新评论
作为 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 属性,提交就填充到相应的位置上去。
发表评论
-
使用Java 动态代理实现AOP
2009-07-22 14:29 607目前整个开发社区对AOP(Aspect Oriented P ... -
Java中用动态代理类实现记忆功能
2009-07-22 14:30 703记忆是衍生自lisp,python, ... -
JAVA动态代理实现方法
2009-07-22 14:31 696在目前的Java开发包中包含了对动态代理的支持,但是其实现只支 ... -
对代理模式与Java动态代理类的理解(转)
2009-07-22 14:32 7671. 代理模式 代理模式的作用是:为其他对象 ... -
十年与java 相关的名字
2009-07-22 17:12 732RickardOberg:J2EE奇才 文/ ... -
搞懂java中的synchronized关键字
2009-07-28 17:48 607实际上,我关于java的基 ... -
字符串转化为unicode编码
2009-07-31 16:16 901package com.util; import java. ... -
移位运算符的规则及其数学意义
2009-07-31 18:02 780移位运算符就是在二进制的基础上对数字进行平移。按照平移的方 ... -
几个谜题,深入的了解java
2009-08-03 17:02 732在2009年的JavaOne大会上,Joshua Bloch和 ... -
一、我对java中编码的理解(摘)
2009-08-06 09:17 6241. 编码的产生 对电 ... -
四、深入下package,import:(摘)
2009-08-06 09:18 708注:因package,import涉及较多内容,另开一个帖子了 ... -
三、我对java中类路径的理解(摘)
2009-08-06 09:18 529Java中的类路径分“编译后的存放路径” 和 “运行时的查找路 ... -
二、我对java中类装载的理解(摘)
2009-08-06 09:18 7771.Java中的所有类,必须 ... -
java class文件格式解析(摘)
2009-08-06 09:19 7931.目的 ... -
synchronized(this)的几个简单示例
2009-08-06 10:31 823一、当两个并发线程访问同一个对象object中的这个synch ... -
java压缩对象 与 对象的序列化
2009-08-07 17:39 668gzip是目前广泛应用的一种压缩方式,它具有很高的压缩比和压缩 ... -
Java常见问题集锦
2009-08-12 12:22 681如何设置Java 2(JDK1.2)的环境变量? 哪些Jav ... -
JavaFX尝鲜
2009-08-17 17:24 506java6出来以后,其一大 ... -
Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
2009-08-17 17:24 7071. 在Servlet/Filter等Servlet web环 ... -
JAVA进阶:VO(DTO)与PO(DAO)之间的转换
2009-08-26 13:58 900PO即 Persistence Object VO ...
相关推荐
5. **JDK中的示例**:许多JDK提供的类,如`String`,都遵循JavaBean规范。 JavaBean 的主要优点在于其便利性,它可以方便地进行属性的存取、序列化、以及在各种Java框架中的使用,例如在Spring框架中作为模型对象...
JavaBean规范.jpg
标签"JAVA javabean"进一步强调了这个项目与Java语言和JavaBean规范的紧密关系。这意味着开发者可能使用了标准的Java技术栈,包括Servlet、JDBC、JSP等,来配合JavaBean构建BBS系统。JavaBean可以作为模型层(Model...
#### 三、JavaBean属性命名规范的重要性 1. **提高代码可读性**:统一的命名规范有助于提高代码的可读性,使得开发者能够更容易地理解和维护代码。 2. **增强代码兼容性**:遵循标准命名规范可以确保JavaBean能够与...
JavaBean 是一种遵循特定编程规范的 Java 类,它主要用于封装数据和提供数据访问方法。JavaBean 不是 Java 语言中的语法规定,而是一种约定俗成的习惯。有时,JavaBean 类也被称作 POJO(Plain Old Java Object),...
JavaBean是Java编程语言中的一种特定类,遵循特定的规范,用于封装数据并提供属性访问。这个"JavaBean示例"旨在帮助初学者理解和使用JavaBean。JavaBean主要用于构建Java应用程序的可重用组件,特别是在JavaServer ...
JavaBean开发规范可以确保JavaBean的可重用性、可维护性和可扩展性。 2. JSP与JavaBean之间的数据传输 JavaBean开发用户注册页面需要使用JSP与JavaBean之间的数据传输,通过JSP页面将用户输入的数据传递给JavaBean...
在提供的课件中,有三个关于JavaBean的PPT文件: 1. **第五章 JavaBean1.ppt**:可能涵盖了JavaBean的基本概念、创建过程和基本操作。 2. **第五章 JavaBean3.ppt**:可能深入讲解了JavaBean的属性、方法以及在JSP中...
JavaBean是Java编程语言中的一种特定类型,它遵循一套特定的规范,被设计用来作为Java应用程序中的可重用组件。...无论是初学者还是经验丰富的开发者,深入理解JavaBean都能为你的编程生涯增添价值。
JavaBean是一种特殊的Java类,它遵循一定的规范,用于封装...这个名为“javabean”的压缩包文件,很可能是为了帮助你学习和实践JavaBean的编写和使用,通过阅读和分析其中的源码,你可以进一步深化对JavaBean的理解。
1. **JavaBean规范** - **可见性**:JavaBean中的属性通常为私有(private),通过公共(public)的getter和setter方法来访问和修改这些属性。 - **无参构造器**:JavaBean需要提供一个无参数的构造器,以便于实例...
描述中提到"根据数据表结构自动生成javabean,需JDK1.7以上版本",这意味着该工具或库支持Java 7及更高版本的特性,并且其核心功能是解析数据库表的信息,然后根据这些信息动态生成符合JavaBean规范的源代码。...
1. **JavaBean规范**: - **可见性**:JavaBean通常使用公共属性和方法,属性通过getter和setter方法进行访问。 - **无参数构造器**:JavaBean需要有一个无参数的构造器以便于实例化。 - **序列化**:为了能够...
- **第二步**:右键选择表,然后在弹出菜单中选择“Generate Java Beans”,这会打开一个配置窗口,允许你设置生成的JavaBean的相关选项,如包名、类名、生成的字段类型等。 - **第三步**:确认配置后,MyEclipse...
JavaBean 是 Java 编程语言中的一种特殊类,它遵循特定的编程规范,主要用于封装数据和实现业务逻辑。在MVC(Model-View-Controller)设计模式中,JavaBean 作为 Model 层,是应用程序的数据载体。在传统的Web开发中...
JavaBean是Java编程中的一种重要概念,主要用于封装数据和业务逻辑,它遵循一定的规范,使得Java对象能够被方便地在Web应用中使用,特别是在Servlet和JSP之间传递数据。在这个项目"JavaBean_Javabean增删改查_...
- **单一职责原则**:JavaBean应该只有一个明确的责任,避免混合业务逻辑和数据。 - **开闭原则**:对扩展开放,对修改关闭,JavaBean的设计应易于扩展而无需改动已有代码。 8. **JavaBean的局限性** - **过度...
1. **公共类(Public Class)**:JavaBean应该是一个公开的类,没有访问修饰符或用public修饰,以便在不同包中可以被访问。 2. **无参构造器(Default Constructor)**:JavaBean需要提供一个无参数的构造器,使得...
JavaBean是Java编程语言中的一种特定类,它遵循一套特定的规范,主要用于封装数据和提供对象间的交互。在Java世界里,JavaBean被广泛应用于构建组件、MVC框架以及持久化层等领域。本节我们将深入探讨JavaBean的概念...
4. **标准接口**:JavaBean 遵循一定的命名约定和标准接口规范,这使得它们可以被其他 Java 组件轻松识别和使用。 #### 三、JavaBean 的作用 1. **简化开发**:通过提供预定义的行为和属性,JavaBean 可以帮助...