職場の先輩が使っていたテクニックをメモ
追記:全部こちらのブログ様に載っていた
http://pppurple.hatenablog.com/entry/2016/12/29/233141
1. Lombokとは
ボイラープレートコード(言語仕様上省く事ができない定型的なコード)をコンパイル時に自動生成してくれる便利なライブラリです。
例えるとJavaBeanのgetter/setter等をアノテーションで済ませられます。
2. コンストラクタインジェクションをしてみる
HogeLogic
がFugaLogic
を利用していて、DIコンテナから取得したいものとします。
2-1. 一般的なSpringのコンストラクタインジェクション
通常のSpringのコンストラクタインジェクションを書いてみます。
@Component
public class HogeLogic {
private final FugaLogic fugaLogic;
@Autowired // <- 4.3以降は省略可
public HogeLogic(FugaLogic fugaLogic) {
this.fugaLogic = fugaLogic;
}
// some method
}
重要なのは、spring4.3以降はコンストラクタが1件の場合@Autowired
を省略できることです。
2-2. Lombokで省略したコンストラクタインジェクション
Lombokで省略したコンストラクタインジェクションを書いてみます。
@RequiredArgsConstructor
をクラスにアノテートするだけです
@RequiredArgsConstructor // <-ここ
@Component
public class HogeLogic {
private final FugaLogic fugaLogic;
// some method
}
Tips. delombokしてみる
自動生成されるコードを見てみると以下のようになります。
@Component
public class HogeLogic {
private final FugaLogic fugaLogic;
public HogeLogic(FugaLogic fugaLogic) {
this.fugaLogic = fugaLogic;
}
// some method
}
サンプルA
の@Autowired
ナシ版が出来上がっています。
3. つまりどういうこと?
@RequiredArgsConstructor
初期化が必要なフィールド(finalフィールドなど)の初期化パラメータを引数に持つコンストラクタを生成するためのアノテーション。
TERASOLUNA Server Framework for Java (5.x) Development Guideline | 11.2. ボイラープレートコードの排除(Lombok)
@RequiredArgsConstructor
の効果によりコンストラクタが生成され、
コンストラクタが1件であるため@Autowired
を省略したことになり、
自動的にコンストラクタインジェクションされた...というわけです。
複合技すごい。