Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

SpringBoot @Autowiredのエラーを解決する方法

Spring Boot の @Autowired のエラー(DI したいクラスが見つからない)を解決する方法を書いていきます。

バージョン

  • Spring Boot 2.7.5

目次

  1. エラーの例
    1.1. コード
    1.2. エラー内容
  2. 解決方法
    2.1. サービスクラスの場合
    2.2. リポジトリの場合
    2.3. 他のクラスの場合

1. エラーの例

1.1. コード

コントローラーと、DI したいサービスクラスを作成しました。

@RestController
public class CustomerController {
  @Autowired
  CustomerService service;
  // 以下省略
}
public class CustomerService {
  // 以下省略
}

1.2. エラー内容

アプリを起動すると、以下の文言が出力されました。

Field service in org.sample.autowired.controller.CustomerController
required a bean of type 'org.sample.autowired.service.CustomerService'
that could not be found.

フィールド service の Bean が見つからない、といった内容です。

2. 解決方法

DI したいクラスごとに、対応方法を記載していきます。

2.1. サービスクラスの場合

サービスクラスにアノテーション @Service を付けます。

@Service
public class CustomerService {
  // 以下省略
}

これで、Spring Boot に管理されて、DI されるようになります。

2.2. リポジトリの場合

リポジトリは、以下のいずれかを満たせば DI されます。

  1. CrudRepositoryRepository を継承している
  2. @Repository が付与されている

上記 1 の場合は、@Repository を付けなくて大丈夫です。

public interface CustomerRepository extends CrudRepository<Customer, Long> {
  // 以下省略
}
public interface CustomerRepository extends Repository<Customer, Long> {
  // 以下省略
}

上記 2 の例は、以下の通りです。

@Repository
public class CustomerJdbcRepository {
  @Autowired
  JdbcTemplate jdbc;
  // 以下省略
}

2.3. 他のクラスの場合

サービスクラスやリポジトリではない場合、@Component を付けます。

@Component
public class ComponentClass {
  // 以下省略
}