Spring Boot の @Autowired
のエラー(DI したいクラスが見つからない)を解決する方法を書いていきます。
バージョン
- Spring Boot 2.7.5
目次
- エラーの例
1.1. コード
1.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 されます。
CrudRepository
やRepository
を継承している@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 { // 以下省略 }