Spring bootでBeanを挿入する方法
- @Autowired
- setter
- コンストラクタ
コンストラクタを使おう
コンストラクタを使う場合は「@RequiredArgsConstructor」をクラスに付けて挿入してもらいたいフィールドをfinalで宣言するだけです。
@RequiredArgsConstructor // finalフィールドのコンストラクタを生成する
@Service
public class PostsService {
// finalフィールドで宣言する
private final PostsRepository postsRepository;
@Transactional
public Long save(PostsSaveRequestDto requestDto) {
return postsRepository.save(requestDto.toEntity()).getId();
}
}
@RequiredArgsConstructorアノテーションはfinalフィールドに対してインスタンスを挿入してくれます。
@RequiredArgsConstructor使う理由
コンストラクタを使わずにアノテーションを使う理由は以下となります。
- 該当クラスの依存性の関係が変更されるたびにコンストラクタのコードを続けて修正するめんどくさいことを解決するためです。
- Lombokアノテーションがあれば該当コントローラに新しいサービスを追加したり、既存コンポーネントを削除したりなどの状況が発生してもコンストラクタのコードは触らなくても済ませます。