Spring içinde @service, @controller ve @repository annotationları arasında gerçekleştirimde bir fark yok. Hepsini birbiri yerine kullanabilirsin. Sadece @component diğerlerinden ayrılabiliyor. İlk üçü için ise mantıksal ayrım genelde uygulanıyor.
@Controller, @Service, @Repository = Programsal olarak fark yok. Mantıksal olarak MVC yapısında Controller var. Controller sınıflarını @Controller annotation ile belirtmek kod okunurluluğunu artırır. n-katmanlı mimaride de veri erişim katmanı ile kodun iş katmanı birbirinden ayrılır. @Repository veri erişim katmanı olarak kullanılan sınıfların belirlenmesinde @service ise iş katmanında yani detaylı iş kodlarının olduğu sınıfları belirlemek için kullanılır. Bu üç annotation da belirtildiği sınıfı application scope (uygulama alanı) olarak oluşturulur.
@Component ise spring tarafından yönetilmesi istenen bütün sınıflar için kullanılabilir. Component'in farkı bu annotation ile yaratılacak sınıfın hangi alanda geçerli olacağını belirtebilirsin. Yani @Component(['session', 'request','application']) session/request/application/kendine ait bir alanda (scope) kullanabilirsin.