Spring Framework Tutorial

Software Setup and Configuration (STS/Eclipse/IntelliJ)

Core Spring

Spring Annotations

Spring Data

Spring JDBC

Spring Security

Spring @Qualifier Annotation with Example

The @Qualifier annotation is used in Spring to indicate which bean should be autowired when there are multiple beans of the same type in the Spring container. It provides finer control over which bean gets injected when multiple candidates exist.

Let's dive into a simple example to demonstrate the usage of the @Qualifier annotation:

Example:

  • Beans:

Suppose you have two beans of type Animal:

@Component("dogBean")
public class Dog implements Animal {
    @Override
    public String sound() {
        return "Woof!";
    }
}

@Component("catBean")
public class Cat implements Animal {
    @Override
    public String sound() {
        return "Meow!";
    }
}

public interface Animal {
    String sound();
}
  • Service Class:

Now, in another service class, you want to autowire an Animal bean. However, since there are two beans of type Animal (Dog and Cat), you'll need to specify which one you want to autowire:

@Service
public class AnimalService {

    private Animal animal;

    @Autowired
    public AnimalService(@Qualifier("dogBean") Animal animal) {
        this.animal = animal;
    }

    public void printAnimalSound() {
        System.out.println(animal.sound());
    }
}

Here, the @Qualifier("dogBean") annotation specifies that the Dog bean (named dogBean) should be autowired into the AnimalService.

  • Main Application:

You can now create a Spring application context and call the printAnimalSound method to see which bean is being used:

public class Application {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext("your.base.package");
        AnimalService service = context.getBean(AnimalService.class);
        service.printAnimalSound();  // This will print "Woof!"
    }
}

Conclusion:

In this example, @Qualifier is used to disambiguate the autowiring process by specifying the exact bean name to be injected. This comes in handy when there are multiple beans of the same type in the Spring container and you need finer control over which specific bean is used for injection.

  1. Using @Qualifier for bean injection in Spring:

    • Description: The @Qualifier annotation in Spring is used to specify the bean name or qualifier when there are multiple beans of the same type.

    • Code Example:

      public class MyComponent {
      
          @Autowired
          @Qualifier("myBeanA")
          private MyBean myBean;
      }
      
  2. @Qualifier annotation for resolving bean ambiguity in Spring:

    • Description: When there are multiple beans of the same type in the Spring context, @Qualifier helps resolve ambiguity by specifying the desired bean name or qualifier.

    • Code Example:

      public class MyComponent {
      
          @Autowired
          @Qualifier("myBeanA")
          private MyBean myBean;
      }
      
  3. How to use @Qualifier with autowiring in Spring:

    • Description: @Qualifier can be used with autowiring to specify the desired bean when there are multiple candidates for autowiring.

    • Code Example:

      public class MyComponent {
      
          @Autowired
          @Qualifier("myBeanA")
          private MyBean myBean;
      }
      
  4. Named bean injection with @Qualifier in Spring:

    • Description: @Qualifier can be used to inject a specifically named bean when there are multiple beans of the same type.

    • Code Example:

      public class MyComponent {
      
          @Autowired
          @Qualifier("myBeanA")
          private MyBean myBean;
      }
      
  5. Working with @Qualifier and primary annotation in Spring:

    • Description: The combination of @Qualifier and @Primary annotations can be used to define a primary bean and further specify a qualifier for resolving ambiguity.

    • Code Example:

      @Primary
      @Component
      public class PrimaryBeanA implements MyBean {
          // Implementation
      }
      
      @Component
      public class MyComponent {
      
          @Autowired
          @Qualifier("primaryBeanA")
          private MyBean myBean;
      }
      
  6. @Qualifier vs @Autowired in Spring framework:

    • Description: @Qualifier is used to specify the bean name or qualifier when there are multiple candidates, while @Autowired is used for automatic bean injection.

    • Code Example:

      public class MyComponent {
      
          @Autowired
          @Qualifier("myBeanA")
          private MyBean myBean;
      }
      
  7. Qualifying beans with @Qualifier annotation in Spring:

    • Description: @Qualifier is used to qualify beans for injection, allowing developers to specify which bean should be injected when there are multiple candidates.

    • Code Example:

      public class MyComponent {
      
          @Autowired
          @Qualifier("myBeanA")
          private MyBean myBean;
      }
      
  8. Examples of @Qualifier annotation in Spring applications:

    • Description: Examples of @Qualifier in Spring applications include scenarios where there are multiple beans of the same type, and the desired bean needs to be explicitly specified.

    • Code Example:

      public class MyComponent {
      
          @Autowired
          @Qualifier("myBeanA")
          private MyBean myBean;
      }