SpringBootなどで開発しているとDIするときは、とりあえず@Autowired!
というコードをよく目にします。
もちろん、我々ググりエンジニアは少し昔のコードを参照する人が多いわけで、それはしかたがないわけだけど。
@Autowiredは廃止予定になっているので、これから新しくコードを書く人は@Autowiredを使わないようにしようね。
巷に転がるサンプルコードのほとんどは@Autowiredになっているので、俺を含むコピペエンジニアには死活問題です。注意だよ注意。
lombokが使えるなら@RequiredArgsConstructor使うとか、そもそもJavaの世界で収めるように自分でコンストラクタを書くようにしようね。
自戒を兼ねて。
ダメなコード
例えばSpringBootで開発中の下記のクラスは全然だめ。
1 2 3 4 5 6 7 8 9 10 11 |
@RestController public class UserController { @Autowired private UserService userService; @PostMapping(value = "/users/{userId}") public ResponseEntity<Object> login(@PathVariable("userId") String userId,) { User user = userService.findById(userId); // .. . . ずらずらコード ... } } |
今後のコード(Lombok使うなら)
lombok使うなら, @RequiredArgsConstructorとかのアノテーションを追加する。
1 2 3 4 5 6 7 8 9 10 11 |
@RestController @RequiredArgsConstructor // <- ここ public class UserController { private final UserService userService; // <- ここ @PostMapping(value = "/users/{userId}") public ResponseEntity<Object> login(@PathVariable("userId") String userId,) { User user = userService.findById(userId); // .. . . ずらずらコード ... } } |
今後のコード(自分でコンストラクタ)
自分でコンストラクタ書くなら下記のような感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@RestController public class UserController { private UserService userService; public UserController(UserService userService) { this.userService = userService; } @PostMapping(value = "/users/{userId}") public ResponseEntity<Object> login(@PathVariable("userId") String userId,) { User user = userService.findById(userId); // .. . . ずらずらコード ... } } |
じゃあねーー。