Spring ``++@Controller++``s, ``++@Service++``s, and ``++@Repository++``s have ``++singleton++`` scope by default, meaning only one instance of the class is ever instantiated in the application. Defining any other scope for one of these class types will result in needless churn as new instances are created and destroyed. In a busy web application, this could cause a significant amount of needless additional load on the server.


This rule raises an issue when the ``++@Scope++`` annotation is applied to a ``++@Controller++``, ``++@Service++``, or ``++@Repository++`` with any value but "singleton". ``++@Scope("singleton")++`` is redundant, but ignored.


== Noncompliant Code Example

[source,java]
----
@Scope("prototype")  // Noncompliant
@Controller
public class HelloWorld { 
----


== Compliant Solution

[source,java]
----
@Controller
public class HelloWorld { 
----


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::message.adoc[]

include::highlighting.adoc[]

'''
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]
