org.sonar.l10n.java.rules.java.S6829.html Maven / Gradle / Ivy
The @Autowired
annotation in Spring is used for automatic dependency injection. It allows Spring to resolve and inject the required
beans into your bean. For example to inject a @Repository
object into a @Service
.
Why is this an issue?
The Spring dependency injection mechanism cannot identify which constructor to use for auto-wiring when multiple constructors are present in a
class. This ambiguity can cause the application to crash at runtime, and it makes the code less clear to understand and more complex to extend and
maintain.
What is the potential impact?
- Incorrect Instantiation: the wrong constructor is selected for instantiation, leading to a bean not being correctly
initialized.
- Unsatisfied Dependency Exception: the constructor selected by Spring requires beans that are not available in the Spring
context.
- Non-Deterministic Behavior: the constructor selected by Spring can vary, based on the number of dependencies that can be
satisfied at runtime, leading to unpredictable application behavior.
- Maintainability Issues: adding more constructors in the future could lead to further confusion and potential bugs.
How to fix it
Use the @Autowired
annotation to specify which constructor to use for auto-wiring.
Code examples
Noncompliant code example
@Component
public class ExampleClass { // Noncompliant, multiple constructors present and no @Autowired annotation to specify which one to use
private final DependencyClass1 dependency1;
public ExampleClass() {
throw new UnsupportedOperationException("Not supported yet.");
}
public ExampleClass(DependencyClass1 dependency1) {
this.dependency1 = dependency1;
}
// ...
}
Compliant solution
@Component
public class ExampleClass {
private final DependencyClass1 dependency1;
public ExampleClass() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Autowired
public ExampleClass(DependencyClass1 dependency1) {
this.dependency1 = dependency1;
}
// ...
}
Resources
Documentation
- Spring - Annotation Config:
Autowired
Articles & blog posts
- Java Guides - UnsatisfiedDependencyException in Spring
Boot
© 2015 - 2024 Weber Informatics LLC | Privacy Policy