SpringBootの@Repositoryとは?
まずは、公式Javadocを見てみます。
アノテーション付きクラスが「リポジトリ」であることを示します。これは、もともとドメイン駆動設計(Evans、2003)によって「オブジェクトのコレクションをエミュレートするストレージ、検索、検索動作をカプセル化するメカニズム」として定義されています。
「データアクセスオブジェクト」などの従来の Java EE パターンを実装するチームもこのステレオ型を DAO クラスに適用できますが、データアクセスオブジェクトと DDD スタイルのリポジトリの違いを理解してから行う必要があります。このアノテーションは汎用のステレオ型であり、個々のチームはセマンティクスを絞り込み、必要に応じて使用できます。Spring 2.5 以降、このアノテーションは @Component の特殊化としても機能し、実装クラスをクラスパススキャンによって自動検出できるようにします。
アノテーション型 Repository
重要なことは、機能的には@Repositoryは@Componentであるということです。つまりDI対象である通常のコンポーネントと変わりません。
しかし、近年のWebアプリケーションのアーキテクチャとして見られる、Contoller->Service->Repositoryという構成において、DI対象となるクラス(@Autowiredされるクラス)の中でも、特にRepositoryであることを明示するために、@Repositoryが使えるようになっています。
「汎用のステレオタイプであり、個々のチームはセマンティクスを絞り込み」とあります。「セマンティクス」とは「意味」「語義」と翻訳されますが、Webアプリケーションの中で@Repositoryを使うときは、チーム内で「リポジトリ」が表す意味を決めて使っていきましょうということです。
DB接続のために、DAOパターンを採用した場合は、DAOクラスに@Componentの代わりに@Repositoryを付与しても問題なく機能します。しかし、このアノテーションはDAOパターンで利用されることを想定してないということは認識しておいてください。
このアノテーションが当初想定していたのは、ドメイン駆動設計における『「オブジェクトのコレクションをエミュレートするストレージ、検索、検索動作をカプセル化するメカニズム」』この用途であるということです。