1. 程式人生 > >Spring Bean 自動裝配 的歧義性(bean 的名稱重複)處理

Spring Bean 自動裝配 的歧義性(bean 的名稱重複)處理

在spring 中,spring 對於上下文的bean ,當自動裝配時,如果bean 的名稱相同,spring 無法做出選擇 。這就所謂的bean 自動裝配的歧義性。所以,當發現歧義性的時候,需要通過一些的方案來解決這個問題。 將可選bean 中的某個設定為首選(primary)的bean 或者使用限定符(qualifier) 來幫助spring選擇需要的bean

1. 標識首選的bean

在宣告bean 的時候,通過將其中一個可選的bean 設定為 首選的bean 能夠避免自動裝配時的歧義性。當遇到歧義性的時候,spring會使用首選的bean @Bean @Primary

2. 限定自動裝配的bean @Qualifier

設定首選bean 的侷限性在於@Primary 無法將可選方案的訪問限定到唯一一個無歧義性的選項中,只能標識一個優選的選擇方法,當首選bean的數量超過一個時,就沒有其他的方法進一步縮小可選範圍 使用限定符可以將所有的可選的bean 縮小範圍,達到只有一個bean 滿足所規定的限制條件
@Qualifier 註解是使用限定符的主要方式,可以和@Autowired 協同使用,在注入的時候指定想要注入的bean

 @Bean(name = "userTemplate")
    @Primary
    public JdbcTemplate jdbcTemplate(@Qualifier("test") DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
 @Bean(name = "studentTemplate")
    public JdbcTemplate schoolJdbcTemplate(@Qualifier("school") DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
    
    @Autowired
    @Qualifier("studentTemplate")
    private JdbcTemplate jdbcTemplate;

github url springbootjdbctemplate 主要是在於DataSourceConfig 配置檔案的使用