spring学习(官网)——解决spring有多个匹配bean产生的冲突

1:使用@Primary注解微调:

通过类型自动匹配可能会导致多个候选对象,在选择过程中有更多限制是必须的,一种方式是使用spring 的@Primary注解实现,当一个单值的依赖有多个候选的bean时,@Primary注解指示给予一个优先的bean。如果在所有候选的bean中只有一个是primary的,这个bean将会被匹配。

@Configuration
public class MovieConfiguration {

    @Bean
    @Primary
    public MovieCatalog firstMovieCatalog() { ... }

    @Bean
    public MovieCatalog secondMovieCatalog() { ... }

    // ...

}

public class MovieRecommender {

    @Autowired
    private MovieCatalog movieCatalog;

    // ...

}

MovieRecommender将会被匹配为 firstMovieCatalog。相应的bean定义:




    

    
        
    

    
        
    

    


基于注解的可以在类上使用@Component  @Service等注解注册bean,然后在优先的类上添加@Primary注解;

当在选择处理上有更多限制,可以使用spring @Qualifier注解,你可以使用给定的参数关联qualifier值,

public class MovieRecommender {

    @Autowired
    @Qualifier("main")
    private MovieCatalog movieCatalog;

    // ...

}

@Qualifier注解也可以在构造器参数和方法参数上指定:

public class MovieRecommender {

    private MovieCatalog movieCatalog;

    private CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public void prepare(@Qualifier("main")MovieCatalog movieCatalog,
            CustomerPreferenceDao customerPreferenceDao) {
        this.movieCatalog = movieCatalog;
        this.customerPreferenceDao = customerPreferenceDao;
    }

    // ...

}

相应的bean定义,构造器参数 Qualifier值和 bean的Qualifier值一致的话,对应bean将被匹配:




    

    
        

        
    

    
        

        
    

    


CustomAutowireConfigurer是一个BeanFactoryPostProcessor允许你注册自定义的qualifier类型,即使他们没有被spring的@Qualifier注解标识。


    
        
            example.CustomQualifier
        
    



你可能感兴趣的:(spring学习(官网)——解决spring有多个匹配bean产生的冲突)