GroovyBeans are JavaBeans but using a much simpler syntax.
Here's an example:
import java.util.Date
class Customer {
Integer id
String name
Date dob
static void main(args) {
customer = new Customer(id:1, name:"Gromit", dob:new Date())
println("Hello ${customer.name}")
}
}
Notice how the properties look just like public fields. You can also set named properties in a bean constructor in Groovy. In Groovy, fields and properties have been merged so that they act and look the same. So, the Groovy code above is equivalent to the following Java code:
import java.util.Date;
public class Customer {
private Integer id;
private String name;
private Date dob;
public Integer getId() {
return this.id;
}
public String getName() {
return this.name;
}
public Date getDob() {
return this.dob;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setDob(Date dob) {
this.dob = dob;
}
public static void main(String[] args) {
Customer customer = new Customer();
customer.setId(1);
customer.setName("Gromit");
customer.setDob(new Date());
println("Hello " + customer.getName());
}
}
When Groovy is compiled to bytecode, the following rules are used.
- If the property is private, then a Java field is used to represent the property.
- If a public or protected property is declared (properties are public by default), then a public or protected getter and setter are created along with a private Java field.
- If you don't declare getters or setters for public or protected properties, they are automatically created for you at the bytecode level.
- If you create a public or protected property, you can overload any auto-created methods.
So, for example, you could create a read only property or a public read-only property with a protected setter like this:
class Foo {
private String name
public String getName() { return name }
Integer amount
protected void setAmount(Integer amount) { this.amount = amount }
cheese
}