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