@Target(value={TYPE,METHOD}) @Retention(value=RUNTIME) @Inherited @Documented public @interface Primary
<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.
 
 @Component
 public class FooService {
     private FooRepository fooRepository;
     @Autowired
     public FooService(FooRepository fooRepository) {
         this.fooRepository = fooRepository;
     }
 }
 @Component
 public class JdbcFooRepository {
     public JdbcFooService(DataSource dataSource) {
         // ...
     }
 }
 @Primary
 @Component
 public class HibernateFooRepository {
     public HibernateFooService(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.
Lazy, 
Bean, 
ComponentScan, 
Component