Поскольку автоматическое обнаружение и связывание по типу может привести к появлению нескольких компонентов-кандидатов, зачастую необходимо иметь больший контроль над процессом выборки. Одним из способов достижения данной цели является аннотация @Primary в Spring. @Primary указывает, что определенному бину следует отдать предпочтение, если несколько бинов являются компонентами-кандидатами на автоматический поиск и связывание с зависимостью с одним значением. Если среди компонентов-кандидатов существует ровно один первичный бин, он становится автоматически связанным значением.

Рассмотрим следующую конфигурацию, которая определяет firstMovieCatalog как первичный MovieCatalog:

Java
@Configuration
public class MovieConfiguration {
    @Bean
    @Primary
    public MovieCatalog firstMovieCatalog() { ... }
    @Bean
    public MovieCatalog secondMovieCatalog() { ... }
    // ...
}
Kotlin
@Configuration
class MovieConfiguration {
    @Bean
    @Primary
    fun firstMovieCatalog(): MovieCatalog { ... }
    @Bean
    fun secondMovieCatalog(): MovieCatalog { ... }
    // ...
}

При предыдущей конфигурации следующий MovieRecommender автоматически связывается с firstMovieCatalog:

Java
public class MovieRecommender {
    @Autowired
    private MovieCatalog movieCatalog;
    // ...
}
Kotlin
class MovieRecommender {
    @Autowired
    private lateinit var movieCatalog: MovieCatalog
    // ...
}

Далее следуют соответствующие определения бинов:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    <context:annotation-config/>
    <bean class="example.SimpleMovieCatalog" primary="true">
        <!-- внедрите все зависимости, требуемые для этого бина -->
    </bean>
    <bean class="example.SimpleMovieCatalog">
        <!-- внедрите все зависимости, требуемые для этого бина -->
    </bean>
    <bean id="movieRecommender" class="example.MovieRecommender"/>
</beans>