Groovy 声明 Bean

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 支持的解决方案,可以为特定的需求指定选项。