| |
| 1 Groovy Beans |
| |
| GroovyBeans are JavaBeans but using a much simpler syntax. |
| Here's an example |
| |
| {code:gsh} |
| import java.util.Date |
| |
| class Customer { |
| // properties |
| Integer id |
| String name |
| Date dob |
| |
| // sample code |
| static void main(args) { |
| customer = new Customer(id:1, name:"Gromit", dob:new Date()) |
| println("Hello ${customer.name}") |
| } |
| } |
| {code} |
| {code:output} |
| Hello Gromit |
| {code} |
| |
| 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 above is equivlent to the |
| following Java code... |
| |
| {code:java} |
| import java.util.Date; |
| |
| public class Customer { |
| // properties |
| private Integer id; |
| private String name; |
| private Date dob; |
| |
| public Integer getId() { |
| return id; |
| } |
| |
| public Integer getId() { |
| return id; |
| } |
| |
| public Integer getId() { |
| return id; |
| } |
| |
| public void setId(Integer id) { |
| this.id = id; |
| } |
| |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| public void setDob(Date dob) { |
| this.dob = dob; |
| } |
| |
| // sample code |
| public static void main(String[] args) { |
| Customer customer = new Customer(); |
| customer.setId(1); |
| customer.setName("Gromit"); |
| |
| println("Hello " + customer.getName()); |
| } |
| } |
| {code} |
| |
| 1.1 Property and field rules |
| |
| 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 any getters or setters they are automatically created for you at the bytecode level for public or protected properties. |
| - if you create a public or protected property you can overload any auto-created methods |
| |
| So for example you could create a public read only property with a protected setter |
| or a read only property like this |
| |
| {code:gsh} |
| class Foo { |
| // read only property |
| private String name |
| public String getName() { return name } |
| |
| // read only property with protected setter |
| Integer amount |
| protected void setAmount(Integer amount) { this.amount = amount } |
| |
| // dynamically typed property |
| cheese |
| } |
| {code} |
| |