Spring Boot 自動注入アノテーションの仕組み
Spring Bootでは、@Autowiredアノテーションを使用することで自動注入が可能となる。この@Autowiredアノテーションは、コンストラクタ、フィールド、メソッド、引数に対して使用でき、対象オブジェクトに依存オブジェクトを自動的に注入する際に用いられる。
一般的な自動注入のシナリオとその方法を次にいくつか説明します。
- @Autowired
@Component
public class MyService {
private MyRepository repository;
@Autowired
public MyService(MyRepository repository) {
this.repository = repository;
}
// ...
}
- 自動アサイン
@Component
public class MyService {
@Autowired
private MyRepository repository;
// ...
}
- @Autowired
@Component
public class MyService {
private MyRepository repository;
@Autowired
public void setRepository(MyRepository repository) {
this.repository = repository;
}
// ...
}
- @Autowired
@Service
public class MyService {
public void doSomething(@Autowired MyRepository repository) {
// ...
}
// ...
}
また、Spring Bootには、より詳細な自動注入を実現するための、@Qualifier(特定の依存オブジェクトを指定する場合)、@Value(設定プロパティ値を注入する場合)などのアノテーションも用意されています。
なお、自動注入はSpringコンテナ内でしか発生しないため、対象クラスが適切にSpringコンポーネント(@Componentや@Service、@Repositoryなど)として宣言されていることを確認する必要があります。また、Spring Bootアプリケーションのエントリクラスに@SpringBootApplicationアノテーションまたは@ComponentScanアノテーションを付加し、Spring Bootが対象クラスをスキャンして自動注入が行われるようにする必要があります。