2013年1月14日 星期一

Project Lombok

Project Lombok是一組compile Annotation API,它可以幫助我們利用Annotation就generate code出來,一方面讓我們少寫一些制式的code,另外一方面也可以省去refactor的麻煩。
以一個Entity class來說,通常就必須要有getter / setter,邏輯上也可能需要equals / hashCode,為了方便debug又可能需要override toString,這些都是Lombok的基本功能。

以一個Entity class為例,使用Lombok之後程式會像下方範例一樣:
代碼:
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.hibernate.annotations.Filter;
import org.hibernate.annotations.Type;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import com.gss.gmo.cao.base.BaseDto;
import com.gss.gmo.cao.hibernate.audit.AuditInfo;

/**
 * @author linus_chien
 *
 */
@Getter
@Setter
@EqualsAndHashCode(callSuper = false, of = { "id" })
@ToString
@Entity
@Filter(name = "personFilter", condition = "name like :name and address is null")
public class Person extends BaseDto {

    private static final long serialVersionUID = 1L;

    @Id
    private String id;

    @Column
    private String name;

    @Column
    private String address;

    @Embedded
    private AuditInfo auditInfo;

    @Type(type = "listType")
    private List<String> emails;

}
這樣的code看起來是不是簡單明瞭許多呢?
下列是我常用的Annotation:
  1. @Getter / @Setter
  2. @ToString
  3. @EqualsAndHashCode
  4. @SneakyThrows
  5. @CommonsLog
其它做太多事情的就不太建議使用了。