Wszystkie to „stereotypy” do component scan; różnica to głównie intencja. `@Service` oznacza logikę biznesową, `@Repository` warstwę dostępu do danych i może tłumaczyć wyjątki persystencji, a `@Component` jest ogólne.
Wszystkie trzy adnotacje są meta‑adnotowane `@Component`, więc są wykrywane przez component scan i rejestrowane jako beany. Różnica jest głównie **semantyczna** (komunikacja intencji), ale `@Repository` ma też praktyczny efekt: **tłumaczenie wyjątków persystencji** do spójnej hierarchii Springa `DataAccessException`.
@Repository
class UserDao {
// JPA/JDBC
}
@Service
class UserService {
private final UserDao dao;
UserService(UserDao dao) { this.dao = dao; }
}