Spring Boot @Primary Example

1. Introduction

Spring Boot provides the @Primary annotation to give higher preference to a bean when multiple candidates are qualified to autowire a single-valued dependency. This helps in determining which bean should be given priority when multiple beans are present of the same type.

Key Points:

1. @Primary indicates that a bean should be given preference when multiple candidates are present for a single autowiring scenario.

2. It is used to avoid ambiguity by marking one bean as the primary autowire candidate.

3. @Primary can be used alongside @Component, @Service, @Repository, or @Controller annotations.

2. Implementation Steps

1. Define an interface with a method that will be implemented by multiple beans.

2. Create at least two implementations of this interface.

3. Annotate one of the implementations with @Primary to indicate it should be the default bean for autowiring.

4. Autowire the interface in a component without using @Qualifier to rely on the @Primary bean.

5. Implement the CommandLineRunner in the main application class to test the autowiring.

3. Implementation Example

Here is the complete code that demonstrates the usage of @Primary annotation:
// Step 1: Define a service interface
public interface CommunicationService {
    String communicate();

// Step 2: Create the first bean implementation
public class EmailService implements CommunicationService {
    public String communicate() {
        return "Communicating via Email";

// Step 2: Create the second bean implementation and annotate it with @Primary
public class SmsService implements CommunicationService {
    public String communicate() {
        return "Communicating via SMS";

// Step 4: Autowire the CommunicationService interface in a component
public class NotificationManager {

    private final CommunicationService communicationService;

    public NotificationManager(CommunicationService communicationService) {
        this.communicationService = communicationService;

    public String sendNotification() {
        return communicationService.communicate();

// Step 5: Create the main application class
public class PrimaryAnnotationExampleApplication implements CommandLineRunner {

    private NotificationManager notificationManager;

    public static void main(String[] args) {
        SpringApplication.run(PrimaryAnnotationExampleApplication.class, args);

    public void run(String... args) {


Communicating via SMS


1. CommunicationService is a simple interface with a method communicate.