簡單的說,就是當Spring容器掃描到某個接口的多個 bean 時,如果某個bean上加了@Primary 注解 ,則這個bean會被優先選用,如下面的例子:
@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) { // ... } }
因為 HibernateFooRepository 上面有注解@Primary,所以它將優先JdbcFooRepository被注入到 FooService中。這在大量應用組件掃描時經常出現。