Spring Bean 自動裝配 的歧義性(bean 的名稱重複)處理
阿新 • • 發佈:2018-11-19
在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 配置檔案的使用