Why is this an issue?
Spring @Component
, @Controller
, @Service
, and @Repository
classes are singletons by default,
meaning only one instance of the class is ever instantiated in the application. Typically such a class might have a few static
members,
such as a logger, but all non-static
members should be managed by Spring.
This rule raises an issue when a singleton @Component
, @Controller
, @Service
, or @Repository
,
not annotated with @ConfigurationProperties
, has non-static
members that are not annotated with one of:
-
org.springframework.beans.factory.annotation.Autowired
-
org.springframework.beans.factory.annotation.Value
-
javax.annotation.Inject
-
javax.annotation.Resource
How to fix it
Add one of these annotations to all non-static
members: @Resource
, @Inject
, @Autowired
or
@Value
.
Code examples
Noncompliant code example
@Controller
public class HelloWorld {
private String name = null;
@RequestMapping("/greet", method = GET)
public String greet(String greetee) {
if (greetee != null) {
this.name = greetee;
}
return "Hello " + this.name; // if greetee is null, you see the previous user's data
}
}
Resources