lombokについて - M2O-Workshop/Training GitHub Wiki
当ページでは、コード自動補完jarである「lombok」の概要や基本的な使用方法を記述する。
運営チーム内での検討の結果、m2oの開発においては、
当面lombokの本格採用は見送る整理となっている。
主な理由としては後述するデメリットから、lombokが初学者向けではないと判断したため。
先々の習熟次第では、再度メリットデメリットを整理した上で、導入を検討するものとする。
lombokはJavaプログラムにおいて記述頻度の高いSetter/Getter等のコードを
コンパイル時に自動で生成する、jarモジュールである。
適用することでJavaソース上にコードを記述せずともClassファイルに
Objectが追加され、アプリケーションの中で利用することができる。
①以下サイトでlombok.jarをダウンロードする
Project Lombok(https://projectlombok.org/)
※m2oのサンプルアプリ「jsug-shop」フォルダにver_1.16.10を格納済み。
②lombok.jarをダブルクリックする
eclipseもしくはエクスプローラー上でlombok.jarをダブルクリック。
表示されるウィンドウで適用するeclipseを選択し、「Install/Update」ボタンを押下する。
初回ビルド時の1回のみで良く、eclipseの設定ファイル「eclipse.ini」が更新される。
eclipse上でダブルクリックした場合は、エディタで開けない旨の警告も表示されるが
「キャンセル」押下で閉じて問題ない。
③アノテーションを付与する
lombokを有効化したいクラスに専用のアノテーションを付与する。
対象アノテーションの詳細については、下記「4.」を参照。
@Data
public class SampleEntity {
private String testStr = "";
private int testInt = 0;
private BigDecimal testDecimal = new BigDecimal( 0 );
}
lombokでの主な機能とアノテーションは以下の通り。
①lombok.Data
機能概要 | Dataクラスの生成(一括) |
---|---|
アノテーション | @Data |
機能要約 | メンバのgetterとsetterを自動生成する |
備考/使用箇所等 | entityクラス等で使用する |
②lombok.Getter/lombok.Setter
機能概要 | Dataクラスの生成(個別) |
---|---|
アノテーション | @Getter or @Setter |
機能要約 | メンバのgetter または setterを自動生成する |
備考/使用箇所等 | entityクラス等で使用する |
③lombok.Value
機能概要 | Valueクラスの生成 |
---|---|
アノテーション | @Value |
機能要約 | クラスとメンバをFinal化し、getterを自動生成 |
備考/使用箇所等 | 定数クラス等で使用する |
④lombok.Builder
機能概要 | Builderクラスの生成 |
---|---|
アノテーション | @Builder(builderClassName="Builderクラス名", builderMethodName="Builderメソッド名()") |
機能要約 | インスタンス生成用の内部クラスを自動生成する |
備考/使用箇所等 | パラメータの多いクラスで使用する(※) |
(※)Builder自体はデザインパターンの1つとして定義されている。
内部クラスとして適切にBuilderを保持することでコンストラクタよりも
柔軟にインスタンス生成をコーディング可能となる、という考え方。
=コンストラクタは最もSimpleだが柔軟性に欠くBuilderパターンと言える。
参考:http://qiita.com/disc99/items/840cf9936687f97a482b
⑤lombok.NonNull
機能概要 | NotNullの指定 |
---|---|
アノテーション | @NonNull(メンバまたはメソッド引数に付与) |
機能要約 | 対象にnullがセットされた時点でNullPointerExceptionをスローする |
備考/使用箇所等 | nullチェックのコードが割愛できる |
他にもコードを簡略化するアノテーションが多く用意されており、
詳細は以下サイトに綺麗にまとめられている。
Lombokを使った開発ひと巡り:http://blog.y-yuki.net/entry/2016/10/15/165320
【メリット】
・「お約束」のコードを割愛or簡略化することができる。
・lombok.jarはコンパイル時のみあれば良く、実行モジュールからは除外して良い。
【デメリット】
・使い方がjarとしては独特(単純なimportでは有効化されない)。
・Javaソースには残らないため、lombokを知らないとまず気付けない。
⇒ Javaにある程度慣れたプログラマのための機能が多く、初学者には不向き。
jsug-shopはsetter/getterをハードコーディングせずlombokの動的生成に委ねており、
初回ビルドの前にjsug-shopフォルダ直下の「lombok.jar」を実行する必要がある。
SpringBootのスターターキットにも含まれており、
pom.xmlに以下の記述を追加することで利用を制御可能。
※ただし、lombok.jarの起動(eclipse.iniの更新)は手動で行う必要がある。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>