@Primary
标注多个同类型bean中,Autowire首先考虑的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) {
// ...
}
}
由于@primary
注解FooService
中注入的就是HibernateFooRepository
@ConditionalOnMissingBean
如果该类型的bean在别处没有申明,那么Autowire才会注入该注解修饰的bean
@Configuration
public class MyAutoConfiguration {
@ConditionalOnMissingBean
@Bean
public MyService myService() {
...
}
}
如果在别处没有任何MyService
的声明,才会选择该bean注入