JavaBean 是符合一定命名约定的普通的 java 类,例如,为了使在 JavaBean 中的 一个字符串属性 myProp 可用,bean 类必须有声明为 String getMyProp 和 void setMyProp(String value)的公共方法,JavaBean 规范也强烈建议 bean 应该是可序列化的(serializable),这样它们可以被持久化并且可以通过参数构造器容易的进行构建,典型的 java 实现是下面这样的:[code]// Java
public class MyBean implements java.io.Serializable {
private String myprop;
public String getMyprop(){
return myprop;
}
public void setMyprop(String value){
myprop = value;
}
}
[/code]Groovy 中等价为:class MyBean implements Serializable { String myprop
}
代码量有非常大的区别的,groovy 中的一行替换了 java 中的七行,这不但少了很多代
码量,而且自身也是一个说明文档。在 groovy 中,访问属性是十分容易的:所有的类属性
都被声明为缺省可访问范围,三个相关的信息——一个属性有两个访问方法,通过一次声明
来保持一致,改变属性的类型或者名称仅仅要求在一个位置改变代码。
注意:groovy 的旧版本使用@Property 语句来标明属性,这样是难看的,被移除了并且
通过支持属性为默认访问范围。
在底层,groovy 提供了与 java 代码等价的属性访问方法,但是你不用输入这些代码, 此外,只有在类中不存在这些方法的时候才自动生成它们,这样允许你通过自定义逻辑或者访问范围来覆盖标准的访问方法。
Groovy 也提供了一个专有的后台属性(也生成 java 等价代码)。
注意,JavaBean 规范只关注了访问方法的可用,甚至没有要求一个后台属性;但有一个直观的简单实现方法——因此 groovy 也这样做。
注意:groovy 构造了访问方法并且把它们增加到了字节码中,这样保证了 MyBean 在 java 中的使用,groovy 的 MyBean 类是一个验证过的 JavaBean。
列表 7.8 显示了属性的声明选项,包括可选的类型声明和初始值,规则与类属性是等价的(参考 7.2.1 节)
属性有时可读的,有时可写的,这依赖于类是否有相应的 getter 方法或者 setter 方法。
Groovy 的属性既是可读的也是可写的,但是如果你有特殊的需要你总是可以自己写,当在属性声明的时候使用了 final 关键字的时候,这个属性仅仅是可读的(没有创建 setter 方法并且后台属性为 final)。
写 groovyBean 是简单优雅的兼容 JavaBean 支持的解决方案,可以为特定的需求指定选项。