Annotation Interface Primary
Indicates that a bean should be given preference when multiple candidates
 are qualified to autowire a single-valued dependency. If exactly one
 'primary' bean exists among the candidates, it will be the autowired value.
 
This annotation is semantically equivalent to the <bean> element's
 primary attribute in Spring XML.
 
May be used on any class directly or indirectly annotated with
 @Component or on methods annotated with @Bean.
 
Example
 @Component
 public class FooService {
     private FooRepository fooRepository;
     @Autowired
     public FooService(FooRepository fooRepository) {
         this.fooRepository = fooRepository;
     }
 }
 @Component
 public class JdbcFooRepository extends FooRepository {
     public JdbcFooRepository(DataSource dataSource) {
         // ...
     }
 }
 @Primary
 @Component
 public class HibernateFooRepository extends FooRepository {
     public HibernateFooRepository(SessionFactory sessionFactory) {
         // ...
     }
 }
 
 Because HibernateFooRepository is marked with @Primary,
 it will be injected preferentially over the jdbc-based variant assuming both
 are present as beans within the same Spring application context, which is
 often the case when component-scanning is applied liberally.
 
Note that using @Primary at the class level has no effect unless
 component-scanning is being used. If a @Primary-annotated class is
 declared via XML, @Primary annotation metadata is ignored, and
 <bean primary="true|false"/> is respected instead.
- Since:
- 3.0
- Author:
- Chris Beams, Juergen Hoeller
- See Also: