All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.l10n.java.rules.java.S6829.html Maven / Gradle / Ivy

There is a newer version: 8.6.0.37351
Show newest version

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

Articles & blog posts





© 2015 - 2024 Weber Informatics LLC | Privacy Policy